@zhin.js/client 1.0.4 → 1.0.5

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 (97) hide show
  1. package/dist/index.d.ts +8 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/router/index.d.ts +25 -0
  5. package/dist/router/index.d.ts.map +1 -0
  6. package/dist/router/index.js +49 -0
  7. package/dist/router/index.js.map +1 -0
  8. package/dist/store/index.d.ts +19 -0
  9. package/dist/store/index.d.ts.map +1 -0
  10. package/dist/store/index.js +67 -0
  11. package/dist/store/index.js.map +1 -0
  12. package/dist/store/reducers/config.d.ts +54 -0
  13. package/dist/store/reducers/config.d.ts.map +1 -0
  14. package/dist/store/reducers/config.js +78 -0
  15. package/dist/store/reducers/config.js.map +1 -0
  16. package/dist/store/reducers/index.d.ts +13 -0
  17. package/dist/store/reducers/index.d.ts.map +1 -0
  18. package/dist/store/reducers/index.js +11 -0
  19. package/dist/store/reducers/index.js.map +1 -0
  20. package/dist/store/reducers/route.d.ts +37 -0
  21. package/dist/store/reducers/route.d.ts.map +1 -0
  22. package/dist/store/reducers/route.js +85 -0
  23. package/dist/store/reducers/route.js.map +1 -0
  24. package/dist/store/reducers/script.d.ts +17 -0
  25. package/dist/store/reducers/script.d.ts.map +1 -0
  26. package/dist/store/reducers/script.js +74 -0
  27. package/dist/store/reducers/script.js.map +1 -0
  28. package/dist/store/reducers/ui.d.ts +14 -0
  29. package/dist/store/reducers/ui.d.ts.map +1 -0
  30. package/dist/store/reducers/ui.js +23 -0
  31. package/dist/store/reducers/ui.js.map +1 -0
  32. package/dist/types.d.ts +7 -0
  33. package/dist/types.d.ts.map +1 -0
  34. package/dist/types.js +2 -0
  35. package/dist/types.js.map +1 -0
  36. package/dist/websocket/hooks.d.ts +55 -0
  37. package/dist/websocket/hooks.d.ts.map +1 -0
  38. package/dist/websocket/hooks.js +225 -0
  39. package/dist/websocket/hooks.js.map +1 -0
  40. package/dist/websocket/index.d.ts +13 -0
  41. package/dist/websocket/index.d.ts.map +1 -0
  42. package/dist/websocket/index.js +31 -0
  43. package/dist/websocket/index.js.map +1 -0
  44. package/dist/websocket/instance.d.ts +18 -0
  45. package/dist/websocket/instance.d.ts.map +1 -0
  46. package/dist/websocket/instance.js +39 -0
  47. package/dist/websocket/instance.js.map +1 -0
  48. package/dist/websocket/manager.d.ts +110 -0
  49. package/dist/websocket/manager.d.ts.map +1 -0
  50. package/dist/websocket/manager.js +341 -0
  51. package/dist/websocket/manager.js.map +1 -0
  52. package/dist/websocket/messageHandler.d.ts +48 -0
  53. package/dist/websocket/messageHandler.d.ts.map +1 -0
  54. package/dist/websocket/messageHandler.js +140 -0
  55. package/dist/websocket/messageHandler.js.map +1 -0
  56. package/dist/websocket/types.d.ts +125 -0
  57. package/dist/websocket/types.d.ts.map +1 -0
  58. package/dist/websocket/types.js +43 -0
  59. package/dist/websocket/types.js.map +1 -0
  60. package/package.json +8 -18
  61. package/app/index.html +0 -13
  62. package/app/postcss.config.js +0 -5
  63. package/app/src/components/PluginConfigForm/BasicFieldRenderers.tsx +0 -253
  64. package/app/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +0 -261
  65. package/app/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +0 -105
  66. package/app/src/components/PluginConfigForm/FieldRenderer.tsx +0 -110
  67. package/app/src/components/PluginConfigForm/NestedFieldRenderer.tsx +0 -95
  68. package/app/src/components/PluginConfigForm/index.tsx +0 -237
  69. package/app/src/components/PluginConfigForm/types.ts +0 -46
  70. package/app/src/components/ThemeToggle.tsx +0 -21
  71. package/app/src/hooks/useTheme.ts +0 -17
  72. package/app/src/layouts/dashboard.tsx +0 -259
  73. package/app/src/main.tsx +0 -121
  74. package/app/src/pages/dashboard-bots.tsx +0 -198
  75. package/app/src/pages/dashboard-home.tsx +0 -301
  76. package/app/src/pages/dashboard-logs.tsx +0 -298
  77. package/app/src/pages/dashboard-plugin-detail.tsx +0 -360
  78. package/app/src/pages/dashboard-plugins.tsx +0 -166
  79. package/app/src/style.css +0 -1105
  80. package/app/src/theme/index.ts +0 -92
  81. package/app/tailwind.config.js +0 -70
  82. package/app/tsconfig.json +0 -16
  83. /package/{src → client}/index.ts +0 -0
  84. /package/{src → client}/router/index.tsx +0 -0
  85. /package/{src → client}/store/index.ts +0 -0
  86. /package/{src → client}/store/reducers/config.ts +0 -0
  87. /package/{src → client}/store/reducers/index.ts +0 -0
  88. /package/{src → client}/store/reducers/route.ts +0 -0
  89. /package/{src → client}/store/reducers/script.ts +0 -0
  90. /package/{src → client}/store/reducers/ui.ts +0 -0
  91. /package/{src → client}/types.ts +0 -0
  92. /package/{src → client}/websocket/hooks.ts +0 -0
  93. /package/{src → client}/websocket/index.ts +0 -0
  94. /package/{src → client}/websocket/instance.ts +0 -0
  95. /package/{src → client}/websocket/manager.ts +0 -0
  96. /package/{src → client}/websocket/messageHandler.ts +0 -0
  97. /package/{src → client}/websocket/types.ts +0 -0
@@ -0,0 +1,341 @@
1
+ /**
2
+ * WebSocket 核心管理器
3
+ * 负责 WebSocket 连接管理、消息发送、重连逻辑等核心功能
4
+ */
5
+ import { store, setConnected, updateConfigs, updateSchemas } from '../store';
6
+ import { MessageHandler } from './messageHandler';
7
+ import { ConnectionState, WebSocketError, ConnectionError, MessageError, RequestTimeoutError } from './types';
8
+ export class WebSocketManager {
9
+ // ============================================================================
10
+ // 私有属性
11
+ // ============================================================================
12
+ ws = null;
13
+ config;
14
+ callbacks;
15
+ state = ConnectionState.DISCONNECTED;
16
+ // 重连相关
17
+ reconnectAttempts = 0;
18
+ reconnectTimer = null;
19
+ // 请求管理
20
+ requestId = 0;
21
+ pendingRequests = new Map();
22
+ // ============================================================================
23
+ // 构造函数
24
+ // ============================================================================
25
+ constructor(config = {}, callbacks = {}) {
26
+ this.config = {
27
+ url: this.buildWebSocketUrl(config.url),
28
+ reconnectInterval: config.reconnectInterval ?? 3000,
29
+ maxReconnectAttempts: config.maxReconnectAttempts ?? 10,
30
+ requestTimeout: config.requestTimeout ?? 10000
31
+ };
32
+ this.callbacks = callbacks;
33
+ }
34
+ // ============================================================================
35
+ // 公共 API
36
+ // ============================================================================
37
+ /**
38
+ * 建立 WebSocket 连接
39
+ */
40
+ connect() {
41
+ if (this.state === ConnectionState.CONNECTED || this.state === ConnectionState.CONNECTING) {
42
+ return;
43
+ }
44
+ this.setState(ConnectionState.CONNECTING);
45
+ try {
46
+ this.ws = new WebSocket(this.config.url);
47
+ this.attachEventHandlers();
48
+ }
49
+ catch (error) {
50
+ this.handleConnectionError(new ConnectionError('Failed to create WebSocket', error));
51
+ }
52
+ }
53
+ /**
54
+ * 断开 WebSocket 连接
55
+ */
56
+ disconnect() {
57
+ this.clearReconnectTimer();
58
+ this.clearPendingRequests();
59
+ if (this.ws) {
60
+ this.ws.close();
61
+ this.ws = null;
62
+ }
63
+ this.setState(ConnectionState.DISCONNECTED);
64
+ store.dispatch(setConnected(false));
65
+ }
66
+ /**
67
+ * 发送普通消息
68
+ */
69
+ send(message) {
70
+ if (!this.isConnected()) {
71
+ throw new WebSocketError('WebSocket is not connected', 'NOT_CONNECTED');
72
+ }
73
+ try {
74
+ this.ws.send(JSON.stringify(message));
75
+ }
76
+ catch (error) {
77
+ throw new MessageError('Failed to send message', error);
78
+ }
79
+ }
80
+ /**
81
+ * 发送请求并等待响应
82
+ */
83
+ async sendRequest(message) {
84
+ if (!this.isConnected()) {
85
+ throw new WebSocketError('WebSocket is not connected', 'NOT_CONNECTED');
86
+ }
87
+ return new Promise((resolve, reject) => {
88
+ const requestId = ++this.requestId;
89
+ const messageWithId = { ...message, requestId };
90
+ // 设置超时计时器
91
+ const timer = setTimeout(() => {
92
+ this.pendingRequests.delete(requestId);
93
+ reject(new RequestTimeoutError(requestId));
94
+ }, this.config.requestTimeout);
95
+ // 存储请求信息
96
+ this.pendingRequests.set(requestId, { resolve, reject, timer });
97
+ try {
98
+ this.ws.send(JSON.stringify(messageWithId));
99
+ }
100
+ catch (error) {
101
+ this.pendingRequests.delete(requestId);
102
+ clearTimeout(timer);
103
+ reject(new MessageError('Failed to send request', error));
104
+ }
105
+ });
106
+ }
107
+ /**
108
+ * 检查连接状态
109
+ */
110
+ isConnected() {
111
+ return this.ws?.readyState === WebSocket.OPEN;
112
+ }
113
+ /**
114
+ * 获取当前状态
115
+ */
116
+ getState() {
117
+ return this.state;
118
+ }
119
+ // ============================================================================
120
+ // 配置管理 API
121
+ // ============================================================================
122
+ /**
123
+ * 获取插件配置
124
+ */
125
+ async getConfig(pluginName) {
126
+ return this.sendRequest({
127
+ type: 'config:get',
128
+ pluginName
129
+ });
130
+ }
131
+ /**
132
+ * 设置插件配置
133
+ */
134
+ async setConfig(pluginName, config) {
135
+ await this.sendRequest({
136
+ type: 'config:set',
137
+ pluginName,
138
+ data: config
139
+ });
140
+ }
141
+ /**
142
+ * 获取插件 Schema
143
+ */
144
+ async getSchema(pluginName) {
145
+ return this.sendRequest({
146
+ type: 'schema:get',
147
+ pluginName
148
+ });
149
+ }
150
+ /**
151
+ * 获取所有配置
152
+ */
153
+ async getAllConfigs() {
154
+ return this.sendRequest({
155
+ type: 'config:get-all'
156
+ });
157
+ }
158
+ /**
159
+ * 获取所有 Schema
160
+ */
161
+ async getAllSchemas() {
162
+ return this.sendRequest({
163
+ type: 'schema:get-all'
164
+ });
165
+ }
166
+ // ============================================================================
167
+ // 私有方法
168
+ // ============================================================================
169
+ /**
170
+ * 构建 WebSocket URL
171
+ */
172
+ buildWebSocketUrl(customUrl) {
173
+ if (customUrl) {
174
+ return customUrl;
175
+ }
176
+ const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
177
+ const host = window.location.host;
178
+ return `${protocol}//${host}/server`;
179
+ }
180
+ /**
181
+ * 设置连接状态
182
+ */
183
+ setState(newState) {
184
+ const oldState = this.state;
185
+ this.state = newState;
186
+ console.log(`[WebSocket] State changed: ${oldState} -> ${newState}`);
187
+ }
188
+ /**
189
+ * 绑定事件处理器
190
+ */
191
+ attachEventHandlers() {
192
+ if (!this.ws)
193
+ return;
194
+ this.ws.onopen = () => {
195
+ this.handleConnectionOpen();
196
+ };
197
+ this.ws.onmessage = (event) => {
198
+ this.handleMessage(event);
199
+ };
200
+ this.ws.onclose = (event) => {
201
+ this.handleConnectionClose(event);
202
+ };
203
+ this.ws.onerror = (event) => {
204
+ this.handleConnectionError(new ConnectionError('WebSocket error', event));
205
+ };
206
+ }
207
+ /**
208
+ * 处理连接打开
209
+ */
210
+ handleConnectionOpen() {
211
+ this.setState(ConnectionState.CONNECTED);
212
+ this.reconnectAttempts = 0;
213
+ // 更新 Redux 状态
214
+ store.dispatch(setConnected(true));
215
+ // 初始化数据
216
+ this.initializeData();
217
+ // 触发回调
218
+ this.callbacks.onConnect?.();
219
+ }
220
+ /**
221
+ * 处理消息接收
222
+ */
223
+ handleMessage(event) {
224
+ try {
225
+ const message = JSON.parse(event.data);
226
+ // 处理请求响应
227
+ if (message.requestId && this.pendingRequests.has(message.requestId)) {
228
+ this.handleRequestResponse(message);
229
+ return;
230
+ }
231
+ // 处理广播消息
232
+ MessageHandler.handle(message);
233
+ this.callbacks.onMessage?.(message);
234
+ }
235
+ catch (error) {
236
+ console.error('[WebSocket] Message parsing error:', error);
237
+ }
238
+ }
239
+ /**
240
+ * 处理请求响应
241
+ */
242
+ handleRequestResponse(message) {
243
+ const { requestId } = message;
244
+ const pendingRequest = this.pendingRequests.get(requestId);
245
+ if (!pendingRequest) {
246
+ return;
247
+ }
248
+ this.pendingRequests.delete(requestId);
249
+ clearTimeout(pendingRequest.timer);
250
+ if (message.error) {
251
+ pendingRequest.reject(new WebSocketError(message.error, 'SERVER_ERROR'));
252
+ }
253
+ else {
254
+ pendingRequest.resolve(message.data);
255
+ }
256
+ }
257
+ /**
258
+ * 处理连接关闭
259
+ */
260
+ handleConnectionClose(event) {
261
+ this.ws = null;
262
+ store.dispatch(setConnected(false));
263
+ if (this.state === ConnectionState.DISCONNECTED) {
264
+ // 主动断开,不重连
265
+ return;
266
+ }
267
+ this.setState(ConnectionState.RECONNECTING);
268
+ this.callbacks.onDisconnect?.();
269
+ this.scheduleReconnect();
270
+ }
271
+ /**
272
+ * 处理连接错误
273
+ */
274
+ handleConnectionError(error) {
275
+ this.setState(ConnectionState.ERROR);
276
+ console.error('[WebSocket] Connection error:', error);
277
+ this.callbacks.onError?.(error);
278
+ }
279
+ /**
280
+ * 安排重连
281
+ */
282
+ scheduleReconnect() {
283
+ if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
284
+ console.error('[WebSocket] Max reconnect attempts reached');
285
+ this.setState(ConnectionState.ERROR);
286
+ return;
287
+ }
288
+ this.reconnectAttempts++;
289
+ const delay = this.config.reconnectInterval * this.reconnectAttempts;
290
+ console.log(`[WebSocket] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts})`);
291
+ this.reconnectTimer = setTimeout(() => {
292
+ if (this.state === ConnectionState.RECONNECTING) {
293
+ this.connect();
294
+ }
295
+ }, delay);
296
+ }
297
+ /**
298
+ * 清除重连计时器
299
+ */
300
+ clearReconnectTimer() {
301
+ if (this.reconnectTimer) {
302
+ clearTimeout(this.reconnectTimer);
303
+ this.reconnectTimer = null;
304
+ }
305
+ }
306
+ /**
307
+ * 清除所有待处理请求
308
+ */
309
+ clearPendingRequests() {
310
+ for (const [requestId, { reject, timer }] of this.pendingRequests) {
311
+ clearTimeout(timer);
312
+ reject(new WebSocketError('Connection closed', 'CONNECTION_CLOSED'));
313
+ }
314
+ this.pendingRequests.clear();
315
+ }
316
+ /**
317
+ * 初始化数据
318
+ */
319
+ async initializeData() {
320
+ try {
321
+ // 并行获取所有配置和 Schema
322
+ const [configs, schemas] = await Promise.all([
323
+ this.getAllConfigs().catch(error => {
324
+ console.warn('[WebSocket] Failed to load configs:', error);
325
+ return {};
326
+ }),
327
+ this.getAllSchemas().catch(error => {
328
+ console.warn('[WebSocket] Failed to load schemas:', error);
329
+ return {};
330
+ })
331
+ ]);
332
+ // 更新 Redux 状态
333
+ store.dispatch(updateConfigs(configs));
334
+ store.dispatch(updateSchemas(schemas));
335
+ }
336
+ catch (error) {
337
+ console.error('[WebSocket] Data initialization failed:', error);
338
+ }
339
+ }
340
+ }
341
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../client/websocket/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAEhB,MAAM,OAAO,gBAAgB;IAC3B,+EAA+E;IAC/E,OAAO;IACP,+EAA+E;IAEvE,EAAE,GAAqB,IAAI,CAAA;IAC3B,MAAM,CAA2B;IACjC,SAAS,CAAoB;IAC7B,KAAK,GAAoB,eAAe,CAAC,YAAY,CAAA;IAE7D,OAAO;IACC,iBAAiB,GAAG,CAAC,CAAA;IACrB,cAAc,GAA0B,IAAI,CAAA;IAEpD,OAAO;IACC,SAAS,GAAG,CAAC,CAAA;IACb,eAAe,GAAG,IAAI,GAAG,EAI7B,CAAA;IAEJ,+EAA+E;IAC/E,OAAO;IACP,+EAA+E;IAE/E,YAAY,SAA0B,EAAE,EAAE,YAAgC,EAAE;QAC1E,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;YACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;YACnD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;YACvD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;SAC/C,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,+EAA+E;IAC/E,SAAS;IACT,+EAA+E;IAE/E;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,UAAU,EAAE,CAAC;YAC1F,OAAM;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAEzC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxC,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,IAAI,eAAe,CAAC,4BAA4B,EAAE,KAAc,CAAC,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAE3B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QAChB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAC3C,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAY;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CAAC,wBAAwB,EAAE,KAAc,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAU,OAAY;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAA;QACzE,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;YAClC,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAA;YAE/C,UAAU;YACV,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBACtC,MAAM,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAA;YAC5C,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YAE9B,SAAS;YACT,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YAE/D,IAAI,CAAC;gBACH,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBACtC,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CAAC,IAAI,YAAY,CAAC,wBAAwB,EAAE,KAAc,CAAC,CAAC,CAAA;YACpE,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,+EAA+E;IAC/E,WAAW;IACX,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,YAAY;YAClB,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,MAAW;QAC7C,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,IAAI,EAAE,YAAY;YAClB,UAAU;YACV,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,YAAY;YAClB,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,+EAA+E;IAC/E,OAAO;IACP,+EAA+E;IAE/E;;OAEG;IACK,iBAAiB,CAAC,SAAkB;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;QACjC,OAAO,GAAG,QAAQ,KAAK,IAAI,SAAS,CAAA;IACtC,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAAyB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;QAErB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,OAAO,QAAQ,EAAE,CAAC,CAAA;IACtE,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAM;QAEpB,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC7B,CAAC,CAAA;QAED,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACnC,CAAC,CAAA;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,eAAe,CAAC,iBAAiB,EAAE,KAAY,CAAC,CAAC,CAAA;QAClF,CAAC,CAAA;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAE1B,cAAc;QACd,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;QAElC,QAAQ;QACR,IAAI,CAAC,cAAc,EAAE,CAAA;QAErB,OAAO;QACP,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAA;IAC9B,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAmB;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAExD,SAAS;YACT,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;gBACnC,OAAM;YACR,CAAC;YAED,SAAS;YACT,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAA;QAErC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAY;QACxC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACtC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAElC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,cAAc,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;QAC1E,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAiB;QAC7C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACd,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QAEnC,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;YAChD,WAAW;YACX,OAAM;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAA;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC1B,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAY;QACxC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;QACrD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAY,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC3D,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;YACpC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,eAAe,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;QAE7H,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;gBAChD,IAAI,CAAC,OAAO,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;IACX,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClE,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,CAAC,IAAI,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC3C,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACjC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;oBAC1D,OAAO,EAAE,CAAA;gBACX,CAAC,CAAC;gBACF,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACjC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;oBAC1D,OAAO,EAAE,CAAA;gBACX,CAAC,CAAC;aACH,CAAC,CAAA;YAEF,cAAc;YACd,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;YACtC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QAExC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * WebSocket 消息处理器
3
+ * 负责处理不同类型的 WebSocket 消息并分发到对应的处理逻辑
4
+ */
5
+ import type { WebSocketMessage } from './types';
6
+ export declare class MessageHandler {
7
+ /**
8
+ * 处理 WebSocket 消息
9
+ */
10
+ static handle(message: WebSocketMessage): void;
11
+ /**
12
+ * 处理脚本同步消息
13
+ */
14
+ private static handleScriptSync;
15
+ /**
16
+ * 处理脚本添加消息
17
+ */
18
+ private static handleScriptAdd;
19
+ /**
20
+ * 处理脚本删除消息
21
+ */
22
+ private static handleScriptDelete;
23
+ /**
24
+ * 处理配置更新消息
25
+ */
26
+ private static handleConfigUpdated;
27
+ /**
28
+ * 处理批量配置消息
29
+ */
30
+ private static handleConfigBatch;
31
+ /**
32
+ * 处理配置错误消息
33
+ */
34
+ private static handleConfigError;
35
+ /**
36
+ * 处理 Schema 更新消息
37
+ */
38
+ private static handleSchemaUpdated;
39
+ /**
40
+ * 处理批量 Schema 消息
41
+ */
42
+ private static handleSchemaBatch;
43
+ /**
44
+ * 处理系统消息
45
+ */
46
+ private static handleSystemMessage;
47
+ }
48
+ //# sourceMappingURL=messageHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../client/websocket/messageHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IA+C9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAW/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAOjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAShC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAInC"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * WebSocket 消息处理器
3
+ * 负责处理不同类型的 WebSocket 消息并分发到对应的处理逻辑
4
+ */
5
+ import { store, loadScripts, loadScript, unloadScript, updateConfig, updateSchema, updateConfigs, updateSchemas, setError } from '../store';
6
+ export class MessageHandler {
7
+ /**
8
+ * 处理 WebSocket 消息
9
+ */
10
+ static handle(message) {
11
+ try {
12
+ switch (message.type) {
13
+ // 脚本管理相关消息
14
+ case 'sync':
15
+ this.handleScriptSync(message);
16
+ break;
17
+ case 'add':
18
+ this.handleScriptAdd(message);
19
+ break;
20
+ case 'delete':
21
+ this.handleScriptDelete(message);
22
+ break;
23
+ // 配置管理相关消息
24
+ case 'config:updated':
25
+ this.handleConfigUpdated(message);
26
+ break;
27
+ case 'config:batch':
28
+ this.handleConfigBatch(message);
29
+ break;
30
+ case 'config:error':
31
+ this.handleConfigError(message);
32
+ break;
33
+ // Schema 管理相关消息
34
+ case 'schema:updated':
35
+ this.handleSchemaUpdated(message);
36
+ break;
37
+ case 'schema:batch':
38
+ this.handleSchemaBatch(message);
39
+ break;
40
+ // 系统消息
41
+ case 'init-data':
42
+ case 'data-update':
43
+ this.handleSystemMessage(message);
44
+ break;
45
+ default:
46
+ console.warn('[WebSocket] Unknown message type:', message.type);
47
+ }
48
+ }
49
+ catch (error) {
50
+ console.error('[WebSocket] Message handling error:', error);
51
+ }
52
+ }
53
+ /**
54
+ * 处理脚本同步消息
55
+ */
56
+ static handleScriptSync(message) {
57
+ if (message.data?.key === 'entries') {
58
+ const entries = Array.isArray(message.data.value)
59
+ ? message.data.value
60
+ : [message.data.value];
61
+ store.dispatch({ type: 'script/syncEntries', payload: entries });
62
+ store.dispatch(loadScripts(entries));
63
+ }
64
+ }
65
+ /**
66
+ * 处理脚本添加消息
67
+ */
68
+ static handleScriptAdd(message) {
69
+ if (message.data?.key === 'entries') {
70
+ store.dispatch({ type: 'script/addEntry', payload: message.data.value });
71
+ store.dispatch(loadScript(message.data.value));
72
+ }
73
+ }
74
+ /**
75
+ * 处理脚本删除消息
76
+ */
77
+ static handleScriptDelete(message) {
78
+ if (message.data?.key === 'entries') {
79
+ store.dispatch({ type: 'script/removeEntry', payload: message.data.value });
80
+ store.dispatch(unloadScript(message.data.value));
81
+ }
82
+ }
83
+ /**
84
+ * 处理配置更新消息
85
+ */
86
+ static handleConfigUpdated(message) {
87
+ if (message.pluginName && message.data !== undefined) {
88
+ store.dispatch(updateConfig({
89
+ pluginName: message.pluginName,
90
+ config: message.data
91
+ }));
92
+ }
93
+ }
94
+ /**
95
+ * 处理批量配置消息
96
+ */
97
+ static handleConfigBatch(message) {
98
+ if (message.data) {
99
+ store.dispatch(updateConfigs(message.data));
100
+ }
101
+ }
102
+ /**
103
+ * 处理配置错误消息
104
+ */
105
+ static handleConfigError(message) {
106
+ if (message.pluginName && message.error) {
107
+ store.dispatch(setError({
108
+ pluginName: message.pluginName,
109
+ error: message.error
110
+ }));
111
+ }
112
+ }
113
+ /**
114
+ * 处理 Schema 更新消息
115
+ */
116
+ static handleSchemaUpdated(message) {
117
+ if (message.pluginName && message.data !== undefined) {
118
+ store.dispatch(updateSchema({
119
+ pluginName: message.pluginName,
120
+ schema: message.data
121
+ }));
122
+ }
123
+ }
124
+ /**
125
+ * 处理批量 Schema 消息
126
+ */
127
+ static handleSchemaBatch(message) {
128
+ if (message.data) {
129
+ store.dispatch(updateSchemas(message.data));
130
+ }
131
+ }
132
+ /**
133
+ * 处理系统消息
134
+ */
135
+ static handleSystemMessage(message) {
136
+ // 系统消息暂时不需要特殊处理
137
+ // 可以在这里添加系统级别的消息处理逻辑
138
+ }
139
+ }
140
+ //# sourceMappingURL=messageHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandler.js","sourceRoot":"","sources":["../../client/websocket/messageHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * WebSocket 相关类型定义
3
+ */
4
+ export interface BaseMessage {
5
+ type: string;
6
+ timestamp?: number;
7
+ requestId?: number;
8
+ error?: string;
9
+ }
10
+ export interface ScriptSyncMessage extends BaseMessage {
11
+ type: 'sync';
12
+ data: {
13
+ key: 'entries';
14
+ value: string[];
15
+ };
16
+ }
17
+ export interface ScriptAddMessage extends BaseMessage {
18
+ type: 'add';
19
+ data: {
20
+ key: 'entries';
21
+ value: string;
22
+ };
23
+ }
24
+ export interface ScriptDeleteMessage extends BaseMessage {
25
+ type: 'delete';
26
+ data: {
27
+ key: 'entries';
28
+ value: string;
29
+ };
30
+ }
31
+ export interface ConfigGetMessage extends BaseMessage {
32
+ type: 'config:get';
33
+ pluginName: string;
34
+ }
35
+ export interface ConfigSetMessage extends BaseMessage {
36
+ type: 'config:set';
37
+ pluginName: string;
38
+ data: any;
39
+ }
40
+ export interface ConfigUpdatedMessage extends BaseMessage {
41
+ type: 'config:updated';
42
+ pluginName: string;
43
+ data: any;
44
+ }
45
+ export interface ConfigBatchMessage extends BaseMessage {
46
+ type: 'config:batch';
47
+ data: Record<string, any>;
48
+ }
49
+ export interface ConfigErrorMessage extends BaseMessage {
50
+ type: 'config:error';
51
+ pluginName: string;
52
+ error: string;
53
+ }
54
+ export interface SchemaGetMessage extends BaseMessage {
55
+ type: 'schema:get';
56
+ pluginName: string;
57
+ }
58
+ export interface SchemaUpdatedMessage extends BaseMessage {
59
+ type: 'schema:updated';
60
+ pluginName: string;
61
+ data: any;
62
+ }
63
+ export interface SchemaBatchMessage extends BaseMessage {
64
+ type: 'schema:batch';
65
+ data: Record<string, any>;
66
+ }
67
+ export interface InitDataMessage extends BaseMessage {
68
+ type: 'init-data';
69
+ }
70
+ export interface DataUpdateMessage extends BaseMessage {
71
+ type: 'data-update';
72
+ }
73
+ export type WebSocketMessage = ScriptSyncMessage | ScriptAddMessage | ScriptDeleteMessage | ConfigGetMessage | ConfigSetMessage | ConfigUpdatedMessage | ConfigBatchMessage | ConfigErrorMessage | SchemaGetMessage | SchemaUpdatedMessage | SchemaBatchMessage | InitDataMessage | DataUpdateMessage;
74
+ export interface WebSocketConfig {
75
+ /** WebSocket 服务器 URL */
76
+ url?: string;
77
+ /** 重连间隔时间(毫秒) */
78
+ reconnectInterval?: number;
79
+ /** 最大重连尝试次数 */
80
+ maxReconnectAttempts?: number;
81
+ /** 请求超时时间(毫秒) */
82
+ requestTimeout?: number;
83
+ }
84
+ export interface WebSocketCallbacks {
85
+ /** 连接建立回调 */
86
+ onConnect?: () => void;
87
+ /** 连接断开回调 */
88
+ onDisconnect?: () => void;
89
+ /** 连接错误回调 */
90
+ onError?: (error: Event) => void;
91
+ /** 消息接收回调 */
92
+ onMessage?: (message: WebSocketMessage) => void;
93
+ }
94
+ export interface UseConfigOptions {
95
+ /** 是否自动加载配置 */
96
+ autoLoad?: boolean;
97
+ /** 是否自动加载 Schema */
98
+ autoLoadSchema?: boolean;
99
+ }
100
+ export interface UseWebSocketOptions {
101
+ /** 是否自动连接 */
102
+ autoConnect?: boolean;
103
+ }
104
+ export declare enum ConnectionState {
105
+ DISCONNECTED = "disconnected",
106
+ CONNECTING = "connecting",
107
+ CONNECTED = "connected",
108
+ RECONNECTING = "reconnecting",
109
+ ERROR = "error"
110
+ }
111
+ export declare class WebSocketError extends Error {
112
+ code: string;
113
+ originalError?: Error | undefined;
114
+ constructor(message: string, code: string, originalError?: Error | undefined);
115
+ }
116
+ export declare class RequestTimeoutError extends WebSocketError {
117
+ constructor(requestId: number);
118
+ }
119
+ export declare class ConnectionError extends WebSocketError {
120
+ constructor(message: string, originalError?: Error);
121
+ }
122
+ export declare class MessageError extends WebSocketError {
123
+ constructor(message: string, originalError?: Error);
124
+ }
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../client/websocket/types.ts"],"names":[],"mappings":"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"}