easyeda-mcp-pro 0.2.0 → 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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +127 -38
  3. package/dist/bridge/manager.d.ts +18 -11
  4. package/dist/bridge/manager.js +176 -113
  5. package/dist/bridge/manager.js.map +1 -1
  6. package/dist/bridge/protocol.d.ts +2 -4
  7. package/dist/bridge/protocol.js +2 -0
  8. package/dist/bridge/protocol.js.map +1 -1
  9. package/dist/bridge/types.d.ts +19 -42
  10. package/dist/bridge/types.js +11 -0
  11. package/dist/bridge/types.js.map +1 -1
  12. package/dist/cli/local-setup.d.ts +33 -0
  13. package/dist/cli/local-setup.js +181 -0
  14. package/dist/cli/local-setup.js.map +1 -0
  15. package/dist/config/env.d.ts +1 -0
  16. package/dist/config/env.js +2 -1
  17. package/dist/config/env.js.map +1 -1
  18. package/dist/config/profiles.js +8 -8
  19. package/dist/config/profiles.js.map +1 -1
  20. package/dist/config/version.d.ts +1 -0
  21. package/dist/config/version.js +2 -0
  22. package/dist/config/version.js.map +1 -0
  23. package/dist/index.d.ts +1 -2
  24. package/dist/index.js +40 -64
  25. package/dist/index.js.map +1 -1
  26. package/dist/schemas/common.d.ts +1 -108
  27. package/dist/schemas/common.js +0 -62
  28. package/dist/schemas/common.js.map +1 -1
  29. package/dist/server/factory.d.ts +6 -3
  30. package/dist/server/factory.js +20 -13
  31. package/dist/server/factory.js.map +1 -1
  32. package/dist/server/transports/http.js +85 -1
  33. package/dist/server/transports/http.js.map +1 -1
  34. package/dist/storage/database.js +5 -4
  35. package/dist/storage/database.js.map +1 -1
  36. package/dist/storage/types.d.ts +0 -9
  37. package/dist/storage/types.js +1 -8
  38. package/dist/storage/types.js.map +1 -1
  39. package/dist/tools/L0_diagnostics.js +169 -9
  40. package/dist/tools/L0_diagnostics.js.map +1 -1
  41. package/dist/tools/L1_board.js +43 -15
  42. package/dist/tools/L1_board.js.map +1 -1
  43. package/dist/tools/L1_bom.js +18 -0
  44. package/dist/tools/L1_bom.js.map +1 -1
  45. package/dist/tools/L1_schematic.js +241 -1
  46. package/dist/tools/L1_schematic.js.map +1 -1
  47. package/dist/tools/register.d.ts +3 -0
  48. package/dist/tools/register.js +15 -0
  49. package/dist/tools/register.js.map +1 -0
  50. package/dist/tools/registry.d.ts +2 -2
  51. package/dist/tools/registry.js +17 -16
  52. package/dist/tools/registry.js.map +1 -1
  53. package/dist/tools/types.d.ts +2 -21
  54. package/dist/vendors/jlcpcb/client.d.ts +3 -2
  55. package/dist/vendors/lcsc/client.d.ts +0 -9
  56. package/dist/vendors/lcsc/client.js.map +1 -1
  57. package/dist/vendors/mouser/client.d.ts +2 -5
  58. package/dist/vendors/mouser/client.js.map +1 -1
  59. package/easyeda-bridge-extension.eext +0 -0
  60. package/package.json +12 -6
  61. package/dist/bridge/client.d.ts +0 -16
  62. package/dist/bridge/client.js +0 -48
  63. package/dist/bridge/client.js.map +0 -1
  64. package/dist/bridge/extension.d.ts +0 -26
  65. package/dist/bridge/extension.js +0 -556
  66. package/dist/bridge/extension.js.map +0 -1
  67. package/dist/server/errors.d.ts +0 -3
  68. package/dist/server/errors.js +0 -59
  69. package/dist/server/errors.js.map +0 -1
@@ -1,556 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { WebSocketServer, WebSocket } from 'ws';
3
- import { getLogger } from '../utils/logger.js';
4
- import { BridgeHandshakeSchema, BridgeRequestSchema } from './protocol.js';
5
- import { EasyedaApiMethodSchema } from './types.js';
6
- export class BridgeExtension extends EventEmitter {
7
- state = 'idle';
8
- config;
9
- wss = null;
10
- client = null;
11
- heartbeatTimer = null;
12
- constructor(config) {
13
- super();
14
- this.config = config;
15
- }
16
- async start() {
17
- const logger = getLogger();
18
- const prev = this.state;
19
- this.state = 'listening';
20
- this.emit('stateChanged', this.state, prev);
21
- return new Promise((resolve, reject) => {
22
- try {
23
- this.wss = new WebSocketServer({
24
- host: this.config.BRIDGE_HOST,
25
- port: this.config.BRIDGE_PORT,
26
- maxPayload: 1024 * 1024,
27
- });
28
- }
29
- catch (err) {
30
- this.state = 'error';
31
- this.emit('stateChanged', this.state, prev);
32
- reject(err);
33
- return;
34
- }
35
- this.wss.on('listening', () => {
36
- logger.info({ host: this.config.BRIDGE_HOST, port: this.config.BRIDGE_PORT }, 'bridge extension listening');
37
- resolve();
38
- });
39
- this.wss.on('error', (err) => {
40
- logger.error({ err }, 'bridge extension server error');
41
- this.state = 'error';
42
- this.emit('stateChanged', this.state, prev);
43
- this.emit('error', err instanceof Error ? err : new Error(String(err)));
44
- reject(err);
45
- });
46
- this.wss.on('connection', (ws, req) => {
47
- const clientAddr = req.socket.remoteAddress ?? 'unknown';
48
- logger.info({ clientAddr }, 'incoming bridge connection');
49
- if (this.client) {
50
- logger.warn({ clientAddr }, 'rejecting additional client connection');
51
- ws.close(4000, 'Only one client allowed');
52
- return;
53
- }
54
- this.client = ws;
55
- const prevState = this.state;
56
- this.state = 'connected';
57
- this.emit('stateChanged', this.state, prevState);
58
- this.emit('clientConnected');
59
- ws.on('message', (raw) => {
60
- try {
61
- const text = raw.toString();
62
- let data;
63
- try {
64
- data = JSON.parse(text);
65
- }
66
- catch {
67
- ws.send(JSON.stringify({ type: 'error', message: 'Invalid JSON' }));
68
- return;
69
- }
70
- switch (data.type) {
71
- case 'handshake':
72
- this.handleHandshake(ws, data);
73
- break;
74
- case 'heartbeat':
75
- this.handleHeartbeat(ws, data);
76
- break;
77
- case 'request':
78
- this.handleRequest(ws, data);
79
- break;
80
- default:
81
- ws.send(JSON.stringify({ type: 'error', message: `Unknown message type: ${data.type}` }));
82
- }
83
- }
84
- catch (err) {
85
- logger.error({ err, raw: raw.toString() }, 'bridge extension message error');
86
- try {
87
- ws.send(JSON.stringify({ type: 'error', message: 'Internal processing error' }));
88
- }
89
- catch {
90
- // client may already be closed
91
- }
92
- }
93
- });
94
- ws.on('close', (code, reason) => {
95
- const reasonStr = reason?.toString() ?? `code ${code}`;
96
- logger.info({ code, reason: reasonStr }, 'bridge client disconnected');
97
- this.client = null;
98
- const prevState = this.state;
99
- this.state = 'listening';
100
- this.emit('stateChanged', this.state, prevState);
101
- this.emit('clientDisconnected', reasonStr);
102
- this.stopHeartbeat();
103
- });
104
- ws.on('error', (err) => {
105
- logger.error({ err }, 'bridge extension client socket error');
106
- this.emit('error', err instanceof Error ? err : new Error(String(err)));
107
- });
108
- });
109
- });
110
- }
111
- handleHandshake(ws, data) {
112
- const logger = getLogger();
113
- const parsed = BridgeHandshakeSchema.safeParse(data);
114
- if (!parsed.success) {
115
- logger.warn({ issues: parsed.error.issues }, 'bridge handshake validation failed');
116
- ws.close(4001, 'Invalid handshake');
117
- this.client = null;
118
- this.emit('clientDisconnected', 'invalid handshake');
119
- return;
120
- }
121
- const handshake = parsed.data;
122
- if (this.config.BRIDGE_TOKEN && handshake.sessionToken !== this.config.BRIDGE_TOKEN) {
123
- logger.warn('bridge handshake rejected: invalid session token');
124
- ws.close(4001, 'Invalid session token');
125
- this.client = null;
126
- this.emit('clientDisconnected', 'invalid session token');
127
- return;
128
- }
129
- logger.info({
130
- clientName: handshake.clientName,
131
- protocolVersion: handshake.protocolVersion,
132
- }, 'bridge handshake accepted');
133
- const hello = {
134
- type: 'hello',
135
- bridgeVersion: '1.0.0',
136
- easyedaVersion: process.env.EASYEDA_VERSION ?? 'unknown',
137
- apiVersion: '1.0.0',
138
- capabilities: EasyedaApiMethodSchema.options,
139
- methodRegistryHash: 'bridge-1.0.0',
140
- devMode: this.config.EASYEDA_DEV_BRIDGE,
141
- };
142
- ws.send(JSON.stringify(hello));
143
- this.startHeartbeat(ws);
144
- }
145
- handleHeartbeat(ws, data) {
146
- const timestamp = typeof data.timestamp === 'number' ? data.timestamp : Date.now();
147
- ws.send(JSON.stringify({ type: 'heartbeat', timestamp }));
148
- }
149
- async handleRequest(ws, data) {
150
- const logger = getLogger();
151
- const parsed = BridgeRequestSchema.safeParse(data);
152
- if (!parsed.success) {
153
- logger.warn({ issues: parsed.error.issues }, 'bridge request validation failed');
154
- ws.send(JSON.stringify({
155
- id: data.id ?? 'unknown',
156
- type: 'response',
157
- ok: false,
158
- error: {
159
- code: 'INVALID_PARAMS',
160
- message: 'Request validation failed',
161
- suggestion: 'Check the request format and parameters.',
162
- },
163
- durationMs: 0,
164
- }));
165
- return;
166
- }
167
- const request = parsed.data;
168
- const startTime = Date.now();
169
- const methodResult = EasyedaApiMethodSchema.safeParse(request.method);
170
- if (!methodResult.success) {
171
- logger.warn({ method: request.method, id: request.id }, 'bridge request: unknown method');
172
- ws.send(JSON.stringify({
173
- id: request.id,
174
- type: 'response',
175
- ok: false,
176
- error: {
177
- code: 'METHOD_NOT_FOUND',
178
- message: `Unknown method: ${request.method}`,
179
- suggestion: 'Check the method name against the capabilities advertised in hello.',
180
- },
181
- durationMs: Date.now() - startTime,
182
- }));
183
- return;
184
- }
185
- try {
186
- logger.debug({ method: request.method, id: request.id }, 'executing bridge request');
187
- const result = await this.executeMethod(request.method, request.params);
188
- ws.send(JSON.stringify({
189
- id: request.id,
190
- type: 'response',
191
- ok: true,
192
- result,
193
- durationMs: Date.now() - startTime,
194
- }));
195
- }
196
- catch (err) {
197
- const message = err instanceof Error ? err.message : String(err);
198
- logger.warn({ method: request.method, id: request.id, err: message }, 'bridge request failed');
199
- ws.send(JSON.stringify({
200
- id: request.id,
201
- type: 'response',
202
- ok: false,
203
- error: {
204
- code: 'EASYEDA_API_ERROR',
205
- message,
206
- suggestion: 'Check EasyEDA Pro connection and parameters.',
207
- },
208
- durationMs: Date.now() - startTime,
209
- }));
210
- }
211
- }
212
- async executeMethod(method, params) {
213
- if (this.config.EASYEDA_DEV_BRIDGE) {
214
- return this.executeDevMock(method, params);
215
- }
216
- throw new Error(`Method not implemented in bridge extension: ${method}`);
217
- }
218
- async executeDevMock(method, _params) {
219
- const mockDelay = 50;
220
- switch (method) {
221
- case 'project.open':
222
- await new Promise((r) => setTimeout(r, mockDelay));
223
- return {
224
- projectId: 'mock-project',
225
- name: 'Mock Project',
226
- path: '/mock/project.json',
227
- modifiedAt: new Date().toISOString(),
228
- };
229
- case 'project.save':
230
- await new Promise((r) => setTimeout(r, mockDelay));
231
- return { success: true, projectId: 'mock-project', savedAt: new Date().toISOString() };
232
- case 'project.export':
233
- await new Promise((r) => setTimeout(r, mockDelay));
234
- return { filePath: '/tmp/mock-export.sch', pages: 2, componentCount: 5, netCount: 4 };
235
- case 'schematic.listNets': {
236
- await new Promise((r) => setTimeout(r, mockDelay));
237
- return [
238
- {
239
- netName: 'VCC',
240
- nodes: [
241
- { component: 'U1', pin: '8' },
242
- { component: 'C1', pin: '1' },
243
- ],
244
- },
245
- {
246
- netName: 'GND',
247
- nodes: [
248
- { component: 'U1', pin: '4' },
249
- { component: 'C1', pin: '2' },
250
- { component: 'R1', pin: '1' },
251
- ],
252
- },
253
- {
254
- netName: 'SIG_IN',
255
- nodes: [
256
- { component: 'J1', pin: '1' },
257
- { component: 'R1', pin: '2' },
258
- ],
259
- },
260
- {
261
- netName: 'SIG_OUT',
262
- nodes: [
263
- { component: 'U1', pin: '1' },
264
- { component: 'J2', pin: '1' },
265
- ],
266
- },
267
- ];
268
- }
269
- case 'schematic.listComponents': {
270
- await new Promise((r) => setTimeout(r, mockDelay));
271
- return [
272
- {
273
- reference: 'U1',
274
- value: 'LM358',
275
- footprint: 'SOIC-8',
276
- lcsc: 'C12345',
277
- manufacturer: 'TI',
278
- datasheet: 'https://www.ti.com/lm358',
279
- },
280
- {
281
- reference: 'C1',
282
- value: '100nF',
283
- footprint: '0603',
284
- lcsc: 'C23456',
285
- manufacturer: 'Murata',
286
- datasheet: '',
287
- },
288
- {
289
- reference: 'R1',
290
- value: '10k',
291
- footprint: '0603',
292
- lcsc: 'C34567',
293
- manufacturer: 'Yageo',
294
- datasheet: '',
295
- },
296
- {
297
- reference: 'J1',
298
- value: 'Header 2x1',
299
- footprint: 'HDR-2',
300
- lcsc: '',
301
- manufacturer: '',
302
- datasheet: '',
303
- },
304
- {
305
- reference: 'J2',
306
- value: 'Header 2x1',
307
- footprint: 'HDR-2',
308
- lcsc: '',
309
- manufacturer: '',
310
- datasheet: '',
311
- },
312
- ];
313
- }
314
- case 'board.listLayers': {
315
- await new Promise((r) => setTimeout(r, mockDelay));
316
- return [
317
- { name: 'Top Layer', type: 'signal', color: '#FF0000', visible: true, order: 0 },
318
- { name: 'Bottom Layer', type: 'signal', color: '#0000FF', visible: true, order: 1 },
319
- {
320
- name: 'Top Solder Mask',
321
- type: 'soldermask',
322
- color: '#00FF00',
323
- visible: false,
324
- order: 2,
325
- },
326
- {
327
- name: 'Bottom Solder Mask',
328
- type: 'soldermask',
329
- color: '#00FF00',
330
- visible: false,
331
- order: 3,
332
- },
333
- { name: 'Top Silkscreen', type: 'silkscreen', color: '#FFFFFF', visible: true, order: 4 },
334
- {
335
- name: 'Bottom Silkscreen',
336
- type: 'silkscreen',
337
- color: '#FFFFFF',
338
- visible: false,
339
- order: 5,
340
- },
341
- { name: 'Board Outline', type: 'mechanical', color: '#FFFF00', visible: true, order: 6 },
342
- ];
343
- }
344
- case 'board.getStackup': {
345
- await new Promise((r) => setTimeout(r, mockDelay));
346
- return {
347
- totalLayers: 2,
348
- boardThicknessMm: 1.6,
349
- layers: [
350
- {
351
- name: 'Top Layer',
352
- type: 'signal',
353
- thicknessMm: 0.035,
354
- material: 'Copper',
355
- copperWeightOz: 1,
356
- },
357
- {
358
- name: 'FR-4 Core',
359
- type: 'dielectric',
360
- thicknessMm: 1.53,
361
- material: 'FR-4',
362
- dielectricConstant: 4.5,
363
- },
364
- {
365
- name: 'Bottom Layer',
366
- type: 'signal',
367
- thicknessMm: 0.035,
368
- material: 'Copper',
369
- copperWeightOz: 1,
370
- },
371
- ],
372
- };
373
- }
374
- case 'board.exportGerbers': {
375
- await new Promise((r) => setTimeout(r, mockDelay));
376
- return { artifactPath: '/tmp/mock-gerbers.zip', fileCount: 7, format: 'Gerber X2' };
377
- }
378
- case 'bom.generate': {
379
- await new Promise((r) => setTimeout(r, mockDelay));
380
- return [
381
- {
382
- reference: 'U1',
383
- value: 'LM358',
384
- footprint: 'SOIC-8',
385
- lcsc: 'C12345',
386
- quantity: 1,
387
- manufacturer: 'TI',
388
- },
389
- {
390
- reference: 'C1',
391
- value: '100nF',
392
- footprint: '0603',
393
- lcsc: 'C23456',
394
- quantity: 1,
395
- manufacturer: 'Murata',
396
- },
397
- {
398
- reference: 'R1',
399
- value: '10k',
400
- footprint: '0603',
401
- lcsc: 'C34567',
402
- quantity: 1,
403
- manufacturer: 'Yageo',
404
- },
405
- {
406
- reference: 'J1,J2',
407
- value: 'Header 2x1',
408
- footprint: 'HDR-2',
409
- lcsc: '',
410
- quantity: 2,
411
- manufacturer: '',
412
- },
413
- ];
414
- }
415
- case 'bom.validate': {
416
- await new Promise((r) => setTimeout(r, mockDelay));
417
- return {
418
- valid: true,
419
- warnings: [],
420
- errors: [],
421
- missingFootprints: [],
422
- missingLcsc: ['J1', 'J2'],
423
- totalComponents: 5,
424
- };
425
- }
426
- case 'design.ruleCheck': {
427
- await new Promise((r) => setTimeout(r, mockDelay));
428
- return {
429
- passed: true,
430
- violations: [
431
- {
432
- rule: 'Clearance',
433
- description: 'Minimum clearance check',
434
- severity: 'info',
435
- count: 0,
436
- },
437
- {
438
- rule: 'TrackWidth',
439
- description: 'Track width minimum check',
440
- severity: 'info',
441
- count: 0,
442
- },
443
- {
444
- rule: 'HoleSize',
445
- description: 'Minimum hole size check',
446
- severity: 'info',
447
- count: 0,
448
- },
449
- ],
450
- errorCount: 0,
451
- warningCount: 0,
452
- };
453
- }
454
- case 'design.drc':
455
- await new Promise((r) => setTimeout(r, mockDelay));
456
- return {
457
- violations: [
458
- {
459
- rule: 'Clearance',
460
- description: 'Minimum clearance check',
461
- severity: 'info',
462
- net: undefined,
463
- component: undefined,
464
- },
465
- ],
466
- totalViolations: 1,
467
- errorCount: 0,
468
- warningCount: 0,
469
- };
470
- case 'design.erc':
471
- await new Promise((r) => setTimeout(r, mockDelay));
472
- return {
473
- violations: [
474
- {
475
- rule: 'UnconnectedPin',
476
- description: 'Check for unconnected pins',
477
- severity: 'info',
478
- net: undefined,
479
- component: undefined,
480
- },
481
- ],
482
- totalViolations: 1,
483
- errorCount: 0,
484
- warningCount: 0,
485
- };
486
- case 'inventory.search': {
487
- await new Promise((r) => setTimeout(r, mockDelay));
488
- return [
489
- {
490
- lcsc: 'C12345',
491
- description: 'LM358 SOP-8 Op Amp',
492
- manufacturer: 'TI',
493
- inStock: true,
494
- unitPrice: 0.45,
495
- },
496
- {
497
- lcsc: 'C23456',
498
- description: '100nF 50V X7R 0603',
499
- manufacturer: 'Murata',
500
- inStock: true,
501
- unitPrice: 0.02,
502
- },
503
- {
504
- lcsc: 'C34567',
505
- description: '10k 1% 0603 Resistor',
506
- manufacturer: 'Yageo',
507
- inStock: true,
508
- unitPrice: 0.01,
509
- },
510
- ];
511
- }
512
- case 'inventory.getPrice': {
513
- await new Promise((r) => setTimeout(r, mockDelay));
514
- return {
515
- lcsc: 'C12345',
516
- price: 0.5,
517
- currency: 'USD',
518
- inStock: true,
519
- quantityAvailable: 1000,
520
- moq: 1,
521
- };
522
- }
523
- default:
524
- throw new Error(`Unknown method: ${method}`);
525
- }
526
- }
527
- startHeartbeat(ws) {
528
- this.stopHeartbeat();
529
- this.heartbeatTimer = setInterval(() => {
530
- if (ws.readyState === WebSocket.OPEN) {
531
- ws.send(JSON.stringify({ type: 'heartbeat', timestamp: Date.now() }));
532
- }
533
- }, this.config.BRIDGE_HEARTBEAT_MS);
534
- }
535
- stopHeartbeat() {
536
- if (this.heartbeatTimer) {
537
- clearInterval(this.heartbeatTimer);
538
- this.heartbeatTimer = null;
539
- }
540
- }
541
- stop() {
542
- this.stopHeartbeat();
543
- if (this.client) {
544
- this.client.close(1001, 'extension shutting down');
545
- this.client = null;
546
- }
547
- if (this.wss) {
548
- this.wss.close();
549
- this.wss = null;
550
- }
551
- const prev = this.state;
552
- this.state = 'idle';
553
- this.emit('stateChanged', this.state, prev);
554
- }
555
- }
556
- //# sourceMappingURL=extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/bridge/extension.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type EasyEdaMcpErrorCode } from '../schemas/common.js';
2
- import { McpError } from '@modelcontextprotocol/sdk/types.js';
3
- export declare function toMcpError(code: EasyEdaMcpErrorCode, message: string, suggestion: string): McpError;
@@ -1,59 +0,0 @@
1
- import { McpError } from '@modelcontextprotocol/sdk/types.js';
2
- export function toMcpError(code, message, suggestion) {
3
- const mcpCode = mapToMcpCode(code);
4
- const errorData = {
5
- code,
6
- message,
7
- suggestion,
8
- retryable: isRetryable(code),
9
- };
10
- return new McpError(mcpCode, JSON.stringify(errorData));
11
- }
12
- function mapToMcpCode(code) {
13
- switch (code) {
14
- case 'CONFIG_INVALID':
15
- return -32600;
16
- case 'BRIDGE_NOT_CONNECTED':
17
- case 'BRIDGE_TIMEOUT':
18
- return -32000;
19
- case 'BRIDGE_METHOD_NOT_AVAILABLE':
20
- return -32601;
21
- case 'SCHEMA_VALIDATION_FAILED':
22
- return -32602;
23
- case 'USER_CONFIRMATION_REQUIRED':
24
- return -32001;
25
- case 'FEATURE_DISABLED':
26
- case 'PROFILE_NOT_ENABLED':
27
- return -32002;
28
- case 'CREDENTIALS_MISSING':
29
- return -32003;
30
- case 'VENDOR_API_UNAVAILABLE':
31
- return -32004;
32
- case 'RATE_LIMITED':
33
- return -32005;
34
- case 'EASYEDA_API_ERROR':
35
- case 'ARTIFACT_EXPORT_FAILED':
36
- case 'SNAPSHOT_FAILED':
37
- return -32006;
38
- case 'AI_PROVIDER_DISABLED':
39
- case 'AI_RESPONSE_INVALID':
40
- return -32007;
41
- case 'NOT_IMPLEMENTED':
42
- return -32604;
43
- case 'INTERNAL_ERROR':
44
- default:
45
- return -32603;
46
- }
47
- }
48
- function isRetryable(code) {
49
- switch (code) {
50
- case 'BRIDGE_TIMEOUT':
51
- case 'VENDOR_API_UNAVAILABLE':
52
- case 'RATE_LIMITED':
53
- case 'EASYEDA_API_ERROR':
54
- return true;
55
- default:
56
- return false;
57
- }
58
- }
59
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/server/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkB,MAAM,oCAAoC,CAAC;AAE9E,MAAM,UAAU,UAAU,CACxB,IAAyB,EACzB,OAAe,EACf,UAAkB;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG;QAChB,IAAI;QACJ,OAAO;QACP,UAAU;QACV,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC;KAC7B,CAAC;IAEF,OAAO,IAAI,QAAQ,CAAC,OAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,YAAY,CAAC,IAAyB;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB;YACnB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,gBAAgB;YACnB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,6BAA6B;YAChC,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,0BAA0B;YAC7B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,4BAA4B;YAC/B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,kBAAkB,CAAC;QACxB,KAAK,qBAAqB;YACxB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,qBAAqB;YACxB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,wBAAwB;YAC3B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,mBAAmB,CAAC;QACzB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,iBAAiB;YACpB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB;YACxB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,iBAAiB;YACpB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,gBAAgB,CAAC;QACtB;YACE,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAyB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC;QACtB,KAAK,wBAAwB,CAAC;QAC9B,KAAK,cAAc,CAAC;QACpB,KAAK,mBAAmB;YACtB,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}