dg-lab-mcp-sse-server 1.0.3

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 (44) hide show
  1. package/README.md +179 -0
  2. package/dist/app.d.ts +43 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +3165 -0
  7. package/dist/cli.js.map +7 -0
  8. package/dist/config.d.ts +79 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/errors.d.ts +132 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/index.d.ts +6 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +3163 -0
  15. package/dist/index.js.map +7 -0
  16. package/dist/jsonrpc-handler.d.ts +79 -0
  17. package/dist/jsonrpc-handler.d.ts.map +1 -0
  18. package/dist/mcp-protocol.d.ts +50 -0
  19. package/dist/mcp-protocol.d.ts.map +1 -0
  20. package/dist/server.d.ts +41 -0
  21. package/dist/server.d.ts.map +1 -0
  22. package/dist/session-manager.d.ts +209 -0
  23. package/dist/session-manager.d.ts.map +1 -0
  24. package/dist/sse-transport.d.ts +88 -0
  25. package/dist/sse-transport.d.ts.map +1 -0
  26. package/dist/tool-manager.d.ts +159 -0
  27. package/dist/tool-manager.d.ts.map +1 -0
  28. package/dist/tools/control-tools.d.ts +126 -0
  29. package/dist/tools/control-tools.d.ts.map +1 -0
  30. package/dist/tools/device-tools.d.ts +33 -0
  31. package/dist/tools/device-tools.d.ts.map +1 -0
  32. package/dist/tools/waveform-tools.d.ts +53 -0
  33. package/dist/tools/waveform-tools.d.ts.map +1 -0
  34. package/dist/types/jsonrpc.d.ts +157 -0
  35. package/dist/types/jsonrpc.d.ts.map +1 -0
  36. package/dist/waveform-parser.d.ts +259 -0
  37. package/dist/waveform-parser.d.ts.map +1 -0
  38. package/dist/waveform-storage.d.ts +101 -0
  39. package/dist/waveform-storage.d.ts.map +1 -0
  40. package/dist/ws-bridge.d.ts +107 -0
  41. package/dist/ws-bridge.d.ts.map +1 -0
  42. package/dist/ws-server.d.ts +174 -0
  43. package/dist/ws-server.d.ts.map +1 -0
  44. package/package.json +63 -0
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview 配置管理模块
3
+ *
4
+ * 这个模块负责加载和验证服务器配置。直接从环境变量读取配置,
5
+ * 对于未设置的选项会使用合理的默认值。
6
+ *
7
+ * 主要功能:
8
+ * - 从环境变量加载配置
9
+ * - 验证配置值的有效性
10
+ * - 提供 IP 地址检测(本地和公网)
11
+ * - 单例模式确保配置一致性
12
+ */
13
+ /**
14
+ * 服务器配置
15
+ *
16
+ * 包含服务器运行所需的所有配置项。大部分配置都有合理的默认值,
17
+ * 只有在需要自定义时才需要通过环境变量设置。
18
+ */
19
+ export interface ServerConfig {
20
+ /** 服务端口,HTTP 和 WebSocket 共用这个端口 */
21
+ port: number;
22
+ /** 公网 IP 地址,用于生成二维码。留空则自动检测本地 IP */
23
+ publicIp: string;
24
+ /** SSE 端点路径,MCP 客户端通过这个路径建立 SSE 连接 */
25
+ ssePath: string;
26
+ /** POST 端点路径,MCP 客户端通过这个路径发送 JSON-RPC 消息 */
27
+ postPath: string;
28
+ /** 会话存储路径(目前未使用,会话仅存内存) */
29
+ sessionStorePath: string;
30
+ /** 波形存储路径,保存用户导入的波形数据 */
31
+ waveformStorePath: string;
32
+ /** 心跳间隔(毫秒),用于保持 WebSocket 连接活跃 */
33
+ heartbeatInterval: number;
34
+ /** 设备过期超时(毫秒),超过这个时间不活跃的设备会被清理 */
35
+ staleDeviceTimeout: number;
36
+ /** 连接超时时间(分钟),会话创建后在此时间内未绑定 APP 则自动销毁 */
37
+ connectionTimeoutMinutes: number;
38
+ }
39
+ /**
40
+ * 加载服务器配置
41
+ *
42
+ * 从环境变量读取所有配置项,.env 文件在模块加载时已经处理过了。
43
+ * 加载完成后会验证配置的有效性,确保服务器能正常启动。
44
+ *
45
+ * @returns 完整的服务器配置对象
46
+ */
47
+ export declare function loadConfig(): ServerConfig;
48
+ /**
49
+ * 获取配置实例
50
+ *
51
+ * 使用单例模式,第一次调用时加载配置,后续调用返回同一实例。
52
+ * 这样可以确保整个应用使用一致的配置,避免重复加载。
53
+ */
54
+ export declare function getConfig(): ServerConfig;
55
+ /**
56
+ * 重置配置实例
57
+ *
58
+ * 主要用于测试场景,让每个测试用例可以从干净的状态开始。
59
+ * 生产环境一般不需要调用这个函数。
60
+ */
61
+ export declare function resetConfig(): void;
62
+ /**
63
+ * 获取本地 IP 地址
64
+ *
65
+ * 遍历所有网络接口,找到第一个非内部的 IPv4 地址。
66
+ * 这通常是局域网 IP,适合在本地网络中使用。
67
+ * 如果找不到合适的地址,返回 localhost。
68
+ */
69
+ export declare function getLocalIP(): string;
70
+ /**
71
+ * 获取用于生成二维码的 IP 地址
72
+ *
73
+ * 优先使用配置中的公网 IP,如果没有设置则自动检测本地 IP。
74
+ * 这个函数集中了 IP 地址的获取逻辑,避免在多处重复实现。
75
+ *
76
+ * @param config - 可选,不传则使用单例配置
77
+ */
78
+ export declare function getEffectiveIP(config?: ServerConfig): string;
79
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAiCD;;;;;;;GAOG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAezC;AAyED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAKxC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAWnC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAG5D"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @fileoverview 统一错误处理模块
3
+ *
4
+ * 这个模块定义了应用中使用的所有错误类型。通过统一的错误结构,
5
+ * 可以更方便地进行错误处理、日志记录和用户反馈。
6
+ *
7
+ * 错误分类:
8
+ * - ConfigError: 配置问题,通常需要修复配置后重启
9
+ * - ConnectionError: 连接问题,单个连接失败不影响其他
10
+ * - ToolError: 工具调用失败,可以重试或换个方式
11
+ * - WebSocketError: WebSocket 通信问题
12
+ * - WaveformError: 波形数据处理问题
13
+ */
14
+ /**
15
+ * 错误码枚举
16
+ *
17
+ * 按模块分组,方便快速定位问题来源。错误码是字符串而不是数字,
18
+ * 这样在日志中更容易理解。
19
+ */
20
+ export declare enum ErrorCode {
21
+ CONFIG_LOAD_FAILED = "CONFIG_LOAD_FAILED",
22
+ CONFIG_INVALID_PORT = "CONFIG_INVALID_PORT",
23
+ CONFIG_INVALID_IP = "CONFIG_INVALID_IP",
24
+ CONFIG_INVALID_PATH = "CONFIG_INVALID_PATH",
25
+ CONN_DEVICE_NOT_FOUND = "CONN_DEVICE_NOT_FOUND",
26
+ CONN_NOT_BOUND = "CONN_NOT_BOUND",
27
+ CONN_ALREADY_EXISTS = "CONN_ALREADY_EXISTS",
28
+ CONN_TIMEOUT = "CONN_TIMEOUT",
29
+ TOOL_INVALID_PARAMS = "TOOL_INVALID_PARAMS",
30
+ TOOL_EXECUTION_FAILED = "TOOL_EXECUTION_FAILED",
31
+ TOOL_NOT_FOUND = "TOOL_NOT_FOUND",
32
+ WS_CONNECTION_FAILED = "WS_CONNECTION_FAILED",
33
+ WS_MESSAGE_INVALID = "WS_MESSAGE_INVALID",
34
+ WS_PEER_DISCONNECTED = "WS_PEER_DISCONNECTED",
35
+ WAVEFORM_PARSE_FAILED = "WAVEFORM_PARSE_FAILED",
36
+ WAVEFORM_NOT_FOUND = "WAVEFORM_NOT_FOUND",
37
+ WAVEFORM_INVALID_FORMAT = "WAVEFORM_INVALID_FORMAT"
38
+ }
39
+ /**
40
+ * 应用错误基类
41
+ *
42
+ * 所有自定义错误都继承自这个类。除了标准的 Error 属性外,
43
+ * 还包含错误码、是否可恢复的标志,以及可选的上下文信息。
44
+ *
45
+ * 可恢复的错误意味着程序可以继续运行,比如单个设备连接失败。
46
+ * 不可恢复的错误通常需要修复后重启,比如配置文件格式错误。
47
+ */
48
+ export declare class AppError extends Error {
49
+ /** 错误码,用于程序化处理 */
50
+ readonly code: ErrorCode;
51
+ /** 是否可恢复(true 表示可以继续运行,false 表示需要终止) */
52
+ readonly recoverable: boolean;
53
+ /** 错误上下文信息,包含相关的调试数据 */
54
+ readonly context?: Record<string, unknown>;
55
+ constructor(code: ErrorCode, message: string, options?: {
56
+ recoverable?: boolean;
57
+ context?: Record<string, unknown>;
58
+ cause?: Error;
59
+ });
60
+ /**
61
+ * 格式化错误信息,方便日志输出
62
+ *
63
+ * 输出格式包含错误码、消息、上下文和原因,一目了然。
64
+ */
65
+ toLogString(): string;
66
+ }
67
+ /**
68
+ * 配置错误
69
+ *
70
+ * 当配置加载或验证失败时使用。这类错误通常是致命的,
71
+ * 需要用户修复配置文件后重新启动服务器。
72
+ */
73
+ export declare class ConfigError extends AppError {
74
+ constructor(message: string, options?: {
75
+ code?: ErrorCode;
76
+ context?: Record<string, unknown>;
77
+ cause?: Error;
78
+ });
79
+ }
80
+ /**
81
+ * 连接错误
82
+ *
83
+ * 当设备连接、会话管理出现问题时使用。这类错误通常是可恢复的,
84
+ * 单个连接失败不会影响其他设备的正常使用。
85
+ */
86
+ export declare class ConnectionError extends AppError {
87
+ constructor(message: string, options?: {
88
+ code?: ErrorCode;
89
+ context?: Record<string, unknown>;
90
+ cause?: Error;
91
+ });
92
+ }
93
+ /**
94
+ * 工具执行错误
95
+ *
96
+ * 当 MCP 工具调用失败时使用。这类错误是可恢复的,
97
+ * 单个工具调用失败不会影响服务器的正常运行。
98
+ */
99
+ export declare class ToolError extends AppError {
100
+ constructor(message: string, options?: {
101
+ code?: ErrorCode;
102
+ context?: Record<string, unknown>;
103
+ cause?: Error;
104
+ });
105
+ }
106
+ /**
107
+ * WebSocket 错误
108
+ *
109
+ * 当 WebSocket 连接或消息处理出现问题时使用。这类错误是可恢复的,
110
+ * 单个 WebSocket 连接的问题不会影响其他连接。
111
+ */
112
+ export declare class WebSocketError extends AppError {
113
+ constructor(message: string, options?: {
114
+ code?: ErrorCode;
115
+ context?: Record<string, unknown>;
116
+ cause?: Error;
117
+ });
118
+ }
119
+ /**
120
+ * 波形错误
121
+ *
122
+ * 当波形数据解析或存储出现问题时使用。这类错误是可恢复的,
123
+ * 单个波形处理失败不会影响其他操作。
124
+ */
125
+ export declare class WaveformError extends AppError {
126
+ constructor(message: string, options?: {
127
+ code?: ErrorCode;
128
+ context?: Record<string, unknown>;
129
+ cause?: Error;
130
+ });
131
+ }
132
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,oBAAY,SAAS;IAEnB,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAG3C,qBAAqB,0BAA0B;IAC/C,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,YAAY,iBAAiB;IAG7B,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,cAAc,mBAAmB;IAGjC,oBAAoB,yBAAyB;IAC7C,kBAAkB,uBAAuB;IACzC,oBAAoB,yBAAyB;IAG7C,qBAAqB,0BAA0B;IAC/C,kBAAkB,uBAAuB;IACzC,uBAAuB,4BAA4B;CACpD;AAED;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wBAAwB;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;IASH;;;;OAIG;IACH,WAAW,IAAI,MAAM;CAUtB;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAErC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CASJ;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAEzC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CASJ;AAED;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,QAAQ;gBAEnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CASJ;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAExC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CASJ;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAEvC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CASJ"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview DG-LAB MCP SSE 服务器入口
3
+ * @description 主入口文件,负责启动应用和处理进程信号
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}