@tdesign-react/chat 1.0.0-beta.4 → 1.0.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.
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-attachments/index.js +1 -1
- package/es/{chatbot → chat-engine}/components/provider/agent-state.js +1 -1
- package/es/chat-engine/components/provider/agent-state.js.map +1 -0
- package/es/{chatbot → chat-engine}/components/toolcall/index.js +1 -1
- package/es/{chatbot → chat-engine}/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/registry.js.map +1 -0
- package/es/{chatbot → chat-engine}/components/toolcall/render.js +1 -2
- package/es/chat-engine/components/toolcall/render.js.map +1 -0
- package/es/{chatbot → chat-engine}/components/toolcall/types.d.ts +12 -4
- package/es/{chatbot → chat-engine}/components/toolcall/types.js +1 -1
- package/es/chat-engine/components/toolcall/types.js.map +1 -0
- package/es/{chatbot → chat-engine}/hooks/useAgentState.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js.map +1 -0
- package/es/{chatbot → chat-engine}/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js.map +1 -0
- package/es/{chatbot → chat-engine}/hooks/useChat.d.ts +1 -1
- package/es/{chatbot → chat-engine}/hooks/useChat.js +1 -1
- package/es/chat-engine/hooks/useChat.js.map +1 -0
- package/es/chat-engine/index.d.ts +6 -0
- package/es/chat-engine/index.js +24 -0
- package/es/{chatbot/core/server → chat-engine}/index.js.map +1 -1
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/index.d.ts +0 -5
- package/es/chatbot/index.js +1 -12
- package/es/chatbot/index.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +10 -9
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +3 -3
- package/es/chatbot/components/provider/agent-state.js.map +0 -1
- package/es/chatbot/components/toolcall/registry.js.map +0 -1
- package/es/chatbot/components/toolcall/render.js.map +0 -1
- package/es/chatbot/components/toolcall/types.js.map +0 -1
- package/es/chatbot/core/adapters/agui/event-mapper.d.ts +0 -104
- package/es/chatbot/core/adapters/agui/event-mapper.js +0 -342
- package/es/chatbot/core/adapters/agui/event-mapper.js.map +0 -1
- package/es/chatbot/core/adapters/agui/events.d.ts +0 -1394
- package/es/chatbot/core/adapters/agui/events.js +0 -181
- package/es/chatbot/core/adapters/agui/events.js.map +0 -1
- package/es/chatbot/core/adapters/agui/index.d.ts +0 -75
- package/es/chatbot/core/adapters/agui/index.js +0 -165
- package/es/chatbot/core/adapters/agui/index.js.map +0 -1
- package/es/chatbot/core/adapters/agui/state-manager.d.ts +0 -99
- package/es/chatbot/core/adapters/agui/state-manager.js +0 -168
- package/es/chatbot/core/adapters/agui/state-manager.js.map +0 -1
- package/es/chatbot/core/adapters/agui/types.d.ts +0 -760
- package/es/chatbot/core/adapters/agui/types.js +0 -89
- package/es/chatbot/core/adapters/agui/types.js.map +0 -1
- package/es/chatbot/core/adapters/agui/utils.d.ts +0 -188
- package/es/chatbot/core/adapters/agui/utils.js +0 -323
- package/es/chatbot/core/adapters/agui/utils.js.map +0 -1
- package/es/chatbot/core/index.d.ts +0 -131
- package/es/chatbot/core/index.js +0 -585
- package/es/chatbot/core/index.js.map +0 -1
- package/es/chatbot/core/processor/index.d.ts +0 -20
- package/es/chatbot/core/processor/index.js +0 -148
- package/es/chatbot/core/processor/index.js.map +0 -1
- package/es/chatbot/core/server/batch-client.d.ts +0 -20
- package/es/chatbot/core/server/batch-client.js +0 -114
- package/es/chatbot/core/server/batch-client.js.map +0 -1
- package/es/chatbot/core/server/connection-manager.d.ts +0 -39
- package/es/chatbot/core/server/connection-manager.js +0 -84
- package/es/chatbot/core/server/connection-manager.js.map +0 -1
- package/es/chatbot/core/server/errors.d.ts +0 -22
- package/es/chatbot/core/server/errors.js +0 -80
- package/es/chatbot/core/server/errors.js.map +0 -1
- package/es/chatbot/core/server/index.d.ts +0 -11
- package/es/chatbot/core/server/index.js +0 -26
- package/es/chatbot/core/server/llm-service.d.ts +0 -44
- package/es/chatbot/core/server/llm-service.js +0 -198
- package/es/chatbot/core/server/llm-service.js.map +0 -1
- package/es/chatbot/core/server/sse-client.d.ts +0 -77
- package/es/chatbot/core/server/sse-client.js +0 -362
- package/es/chatbot/core/server/sse-client.js.map +0 -1
- package/es/chatbot/core/server/sse-parser.d.ts +0 -49
- package/es/chatbot/core/server/sse-parser.js +0 -116
- package/es/chatbot/core/server/sse-parser.js.map +0 -1
- package/es/chatbot/core/server/types.d.ts +0 -54
- package/es/chatbot/core/server/types.js +0 -28
- package/es/chatbot/core/server/types.js.map +0 -1
- package/es/chatbot/core/store/message.d.ts +0 -27
- package/es/chatbot/core/store/message.js +0 -263
- package/es/chatbot/core/store/message.js.map +0 -1
- package/es/chatbot/core/store/model.d.ts +0 -8
- package/es/chatbot/core/store/model.js +0 -65
- package/es/chatbot/core/store/model.js.map +0 -1
- package/es/chatbot/core/store/reactiveState.d.ts +0 -52
- package/es/chatbot/core/store/reactiveState.js +0 -1359
- package/es/chatbot/core/store/reactiveState.js.map +0 -1
- package/es/chatbot/core/type.d.ts +0 -238
- package/es/chatbot/core/type.js +0 -7
- package/es/chatbot/core/type.js.map +0 -1
- package/es/chatbot/core/utils/eventEmitter.d.ts +0 -10
- package/es/chatbot/core/utils/eventEmitter.js +0 -67
- package/es/chatbot/core/utils/eventEmitter.js.map +0 -1
- package/es/chatbot/core/utils/index.d.ts +0 -31
- package/es/chatbot/core/utils/index.js +0 -221
- package/es/chatbot/core/utils/index.js.map +0 -1
- package/es/chatbot/core/utils/logger.d.ts +0 -30
- package/es/chatbot/core/utils/logger.js +0 -87
- package/es/chatbot/core/utils/logger.js.map +0 -1
- package/es/chatbot/hooks/useAgentState.js.map +0 -1
- package/es/chatbot/hooks/useAgentToolcall.js.map +0 -1
- package/es/chatbot/hooks/useChat.js.map +0 -1
- /package/es/{chatbot → chat-engine}/components/provider/agent-state.d.ts +0 -0
- /package/es/{chatbot → chat-engine}/components/toolcall/index.d.ts +0 -0
- /package/es/{chatbot → chat-engine}/components/toolcall/index.js.map +0 -0
- /package/es/{chatbot → chat-engine}/components/toolcall/registry.d.ts +0 -0
- /package/es/{chatbot → chat-engine}/components/toolcall/render.d.ts +0 -0
- /package/es/{chatbot → chat-engine}/hooks/useAgentState.d.ts +0 -0
- /package/es/{chatbot → chat-engine}/hooks/useAgentToolcall.d.ts +0 -0
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tdesign v1.0.0-beta.3
|
|
3
|
-
* (c) 2025 tdesign
|
|
4
|
-
* @license MIT
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
8
|
-
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
9
|
-
import _createClass from '@babel/runtime/helpers/createClass';
|
|
10
|
-
import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
|
|
11
|
-
import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
|
|
12
|
-
import _inherits from '@babel/runtime/helpers/inherits';
|
|
13
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
14
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
15
|
-
import SimpleEventEmitter from '../utils/eventEmitter.js';
|
|
16
|
-
import { LoggerManager } from '../utils/logger.js';
|
|
17
|
-
import { ConnectionManager } from './connection-manager.js';
|
|
18
|
-
import { ConnectionError, TimeoutError } from './errors.js';
|
|
19
|
-
import { SSEParser } from './sse-parser.js';
|
|
20
|
-
import { SSEConnectionState, DEFAULT_SSE_CONFIG } from './types.js';
|
|
21
|
-
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
22
|
-
|
|
23
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
-
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
26
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
27
|
-
var SSEClient = /*#__PURE__*/function (_EventEmitter) {
|
|
28
|
-
function SSEClient(url) {
|
|
29
|
-
var _this;
|
|
30
|
-
_classCallCheck(this, SSEClient);
|
|
31
|
-
_this = _callSuper(this, SSEClient);
|
|
32
|
-
_defineProperty(_this, "state", SSEConnectionState.DISCONNECTED);
|
|
33
|
-
_defineProperty(_this, "logger", LoggerManager.getLogger());
|
|
34
|
-
_defineProperty(_this, "firstTokenReceived", false);
|
|
35
|
-
_this.url = url;
|
|
36
|
-
_this.connectionId = _this.generateConnectionId();
|
|
37
|
-
_this.logger = LoggerManager.getLogger();
|
|
38
|
-
_this.connectionManager = new ConnectionManager(_this.connectionId);
|
|
39
|
-
_this.parser = new SSEParser();
|
|
40
|
-
_this.parser.onMessage = function (event) {
|
|
41
|
-
_this.emit("message", event);
|
|
42
|
-
};
|
|
43
|
-
_this.connectionInfo = {
|
|
44
|
-
id: _this.connectionId,
|
|
45
|
-
url: url,
|
|
46
|
-
state: _this.state,
|
|
47
|
-
createdAt: Date.now(),
|
|
48
|
-
retryCount: 0,
|
|
49
|
-
lastActivity: Date.now(),
|
|
50
|
-
stats: {}
|
|
51
|
-
};
|
|
52
|
-
_this.setupInternalEventHandlers();
|
|
53
|
-
return _this;
|
|
54
|
-
}
|
|
55
|
-
_inherits(SSEClient, _EventEmitter);
|
|
56
|
-
return _createClass(SSEClient, [{
|
|
57
|
-
key: "connect",
|
|
58
|
-
value: function () {
|
|
59
|
-
var _connect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(config) {
|
|
60
|
-
var _t;
|
|
61
|
-
return _regeneratorRuntime.wrap(function (_context) {
|
|
62
|
-
while (1) switch (_context.prev = _context.next) {
|
|
63
|
-
case 0:
|
|
64
|
-
if (!(this.state === SSEConnectionState.CONNECTED || this.state === SSEConnectionState.CONNECTING)) {
|
|
65
|
-
_context.next = 1;
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
return _context.abrupt("return");
|
|
69
|
-
case 1:
|
|
70
|
-
this.config = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_SSE_CONFIG), config), {}, {
|
|
71
|
-
headers: _objectSpread(_objectSpread({}, DEFAULT_SSE_CONFIG.headers), config.headers)
|
|
72
|
-
});
|
|
73
|
-
this.setState(SSEConnectionState.CONNECTING);
|
|
74
|
-
this.connectionManager.startConnection();
|
|
75
|
-
_context.prev = 2;
|
|
76
|
-
this.startTimeoutMonitor();
|
|
77
|
-
_context.next = 3;
|
|
78
|
-
return this.establishConnection();
|
|
79
|
-
case 3:
|
|
80
|
-
this.setState(SSEConnectionState.CONNECTED);
|
|
81
|
-
this.connectionManager.onConnectionSuccess();
|
|
82
|
-
_context.next = 4;
|
|
83
|
-
return this.readStream();
|
|
84
|
-
case 4:
|
|
85
|
-
_context.next = 6;
|
|
86
|
-
break;
|
|
87
|
-
case 5:
|
|
88
|
-
_context.prev = 5;
|
|
89
|
-
_t = _context["catch"](2);
|
|
90
|
-
this.handleConnectionError(_t);
|
|
91
|
-
case 6:
|
|
92
|
-
case "end":
|
|
93
|
-
return _context.stop();
|
|
94
|
-
}
|
|
95
|
-
}, _callee, this, [[2, 5]]);
|
|
96
|
-
}));
|
|
97
|
-
function connect(_x) {
|
|
98
|
-
return _connect.apply(this, arguments);
|
|
99
|
-
}
|
|
100
|
-
return connect;
|
|
101
|
-
}()
|
|
102
|
-
}, {
|
|
103
|
-
key: "abort",
|
|
104
|
-
value: function () {
|
|
105
|
-
var _abort = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
106
|
-
var _t2;
|
|
107
|
-
return _regeneratorRuntime.wrap(function (_context2) {
|
|
108
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
109
|
-
case 0:
|
|
110
|
-
if (!(this.state === SSEConnectionState.DISCONNECTED || this.state === SSEConnectionState.CLOSING)) {
|
|
111
|
-
_context2.next = 1;
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
return _context2.abrupt("return");
|
|
115
|
-
case 1:
|
|
116
|
-
this.setState(SSEConnectionState.CLOSING);
|
|
117
|
-
_context2.prev = 2;
|
|
118
|
-
if (!this.reader) {
|
|
119
|
-
_context2.next = 4;
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
_context2.next = 3;
|
|
123
|
-
return this.reader.cancel();
|
|
124
|
-
case 3:
|
|
125
|
-
this.reader = void 0;
|
|
126
|
-
case 4:
|
|
127
|
-
if (this.controller && !this.controller.signal.aborted) {
|
|
128
|
-
this.controller.abort();
|
|
129
|
-
}
|
|
130
|
-
this.connectionManager.cleanup();
|
|
131
|
-
this.resetParser();
|
|
132
|
-
this.emit("complete", true);
|
|
133
|
-
_context2.next = 6;
|
|
134
|
-
break;
|
|
135
|
-
case 5:
|
|
136
|
-
_context2.prev = 5;
|
|
137
|
-
_t2 = _context2["catch"](2);
|
|
138
|
-
if (_t2.name !== "AbortError") {
|
|
139
|
-
this.logger.error("stream abort failed:", _t2);
|
|
140
|
-
this.emit("error", _t2);
|
|
141
|
-
}
|
|
142
|
-
case 6:
|
|
143
|
-
_context2.prev = 6;
|
|
144
|
-
this.clearTimeouts();
|
|
145
|
-
this.controller = null;
|
|
146
|
-
this.setState(SSEConnectionState.CLOSED);
|
|
147
|
-
return _context2.finish(6);
|
|
148
|
-
case 7:
|
|
149
|
-
case "end":
|
|
150
|
-
return _context2.stop();
|
|
151
|
-
}
|
|
152
|
-
}, _callee2, this, [[2, 5, 6, 7]]);
|
|
153
|
-
}));
|
|
154
|
-
function abort() {
|
|
155
|
-
return _abort.apply(this, arguments);
|
|
156
|
-
}
|
|
157
|
-
return abort;
|
|
158
|
-
}()
|
|
159
|
-
}, {
|
|
160
|
-
key: "getStatus",
|
|
161
|
-
value: function getStatus() {
|
|
162
|
-
return this.state;
|
|
163
|
-
}
|
|
164
|
-
}, {
|
|
165
|
-
key: "getInfo",
|
|
166
|
-
value: function getInfo() {
|
|
167
|
-
return _objectSpread(_objectSpread({}, this.connectionInfo), this.connectionManager.getConnectionInfo());
|
|
168
|
-
}
|
|
169
|
-
}, {
|
|
170
|
-
key: "establishConnection",
|
|
171
|
-
value: function () {
|
|
172
|
-
var _establishConnection = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
173
|
-
var response, _t3;
|
|
174
|
-
return _regeneratorRuntime.wrap(function (_context3) {
|
|
175
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
176
|
-
case 0:
|
|
177
|
-
this.controller = new AbortController();
|
|
178
|
-
_context3.prev = 1;
|
|
179
|
-
_context3.next = 2;
|
|
180
|
-
return fetch(this.url, _objectSpread(_objectSpread({}, this.config), {}, {
|
|
181
|
-
signal: this.controller.signal,
|
|
182
|
-
headers: _objectSpread(_objectSpread({}, this.config.headers), {}, {
|
|
183
|
-
Accept: "text/event-stream",
|
|
184
|
-
"Cache-Control": "no-cache"
|
|
185
|
-
})
|
|
186
|
-
}));
|
|
187
|
-
case 2:
|
|
188
|
-
response = _context3.sent;
|
|
189
|
-
if (!(!response.body || !response.ok)) {
|
|
190
|
-
_context3.next = 3;
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
this.emit("error", new ConnectionError("HTTP ".concat(response.status, ": ").concat(response.statusText), response.status, response));
|
|
194
|
-
return _context3.abrupt("return");
|
|
195
|
-
case 3:
|
|
196
|
-
this.reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
|
|
197
|
-
_context3.next = 5;
|
|
198
|
-
break;
|
|
199
|
-
case 4:
|
|
200
|
-
_context3.prev = 4;
|
|
201
|
-
_t3 = _context3["catch"](1);
|
|
202
|
-
if (_t3.name !== "AbortError") {
|
|
203
|
-
this.logger.error("sse request failed:", _t3);
|
|
204
|
-
this.emit("error", _t3);
|
|
205
|
-
}
|
|
206
|
-
case 5:
|
|
207
|
-
case "end":
|
|
208
|
-
return _context3.stop();
|
|
209
|
-
}
|
|
210
|
-
}, _callee3, this, [[1, 4]]);
|
|
211
|
-
}));
|
|
212
|
-
function establishConnection() {
|
|
213
|
-
return _establishConnection.apply(this, arguments);
|
|
214
|
-
}
|
|
215
|
-
return establishConnection;
|
|
216
|
-
}()
|
|
217
|
-
}, {
|
|
218
|
-
key: "readStream",
|
|
219
|
-
value: function () {
|
|
220
|
-
var _readStream = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
221
|
-
var _yield$this$reader$re, done, value, _this$controller, _t4;
|
|
222
|
-
return _regeneratorRuntime.wrap(function (_context4) {
|
|
223
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
224
|
-
case 0:
|
|
225
|
-
_context4.prev = 0;
|
|
226
|
-
case 1:
|
|
227
|
-
if (!(this.state === SSEConnectionState.CONNECTED && this.reader)) {
|
|
228
|
-
_context4.next = 4;
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
_context4.next = 2;
|
|
232
|
-
return this.reader.read();
|
|
233
|
-
case 2:
|
|
234
|
-
_yield$this$reader$re = _context4.sent;
|
|
235
|
-
done = _yield$this$reader$re.done;
|
|
236
|
-
value = _yield$this$reader$re.value;
|
|
237
|
-
if (!done) {
|
|
238
|
-
_context4.next = 3;
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
|
-
this.logger.info("Connection ".concat(this.connectionId, " stream ended normally"));
|
|
242
|
-
this.emit("complete", false);
|
|
243
|
-
this.setState(SSEConnectionState.DISCONNECTED);
|
|
244
|
-
this.clearTimeouts();
|
|
245
|
-
return _context4.abrupt("return");
|
|
246
|
-
case 3:
|
|
247
|
-
this.connectionInfo.lastActivity = Date.now();
|
|
248
|
-
this.parseSSEData(value);
|
|
249
|
-
_context4.next = 1;
|
|
250
|
-
break;
|
|
251
|
-
case 4:
|
|
252
|
-
_context4.next = 6;
|
|
253
|
-
break;
|
|
254
|
-
case 5:
|
|
255
|
-
_context4.prev = 5;
|
|
256
|
-
_t4 = _context4["catch"](0);
|
|
257
|
-
if (!((_this$controller = this.controller) !== null && _this$controller !== void 0 && _this$controller.signal.aborted)) {
|
|
258
|
-
this.logger.error("Stream reading error for ".concat(this.connectionId, ":"), _t4);
|
|
259
|
-
this.handleConnectionError(_t4);
|
|
260
|
-
} else {
|
|
261
|
-
this.logger.debug("Stream reading stopped for ".concat(this.connectionId, " (aborted)"));
|
|
262
|
-
}
|
|
263
|
-
case 6:
|
|
264
|
-
case "end":
|
|
265
|
-
return _context4.stop();
|
|
266
|
-
}
|
|
267
|
-
}, _callee4, this, [[0, 5]]);
|
|
268
|
-
}));
|
|
269
|
-
function readStream() {
|
|
270
|
-
return _readStream.apply(this, arguments);
|
|
271
|
-
}
|
|
272
|
-
return readStream;
|
|
273
|
-
}()
|
|
274
|
-
}, {
|
|
275
|
-
key: "startTimeoutMonitor",
|
|
276
|
-
value: function startTimeoutMonitor() {
|
|
277
|
-
var _this2 = this;
|
|
278
|
-
if (!this.config.timeout || this.config.timeout <= 0) return;
|
|
279
|
-
var checkInterval = Math.min(this.config.timeout / 2, 5e3);
|
|
280
|
-
this.timeoutTimer = setInterval(function () {
|
|
281
|
-
var now = Date.now();
|
|
282
|
-
var timeSinceLastActivity = now - _this2.connectionInfo.lastActivity;
|
|
283
|
-
if (timeSinceLastActivity >= _this2.config.timeout) {
|
|
284
|
-
if (_this2.state === SSEConnectionState.CONNECTING) {
|
|
285
|
-
_this2.logger.warn("Connection ".concat(_this2.connectionId, " establishment timeout after ").concat(_this2.config.timeout, "ms"));
|
|
286
|
-
_this2.emit("error", new TimeoutError("Connection establishment timed out after ".concat(_this2.config.timeout, "ms")));
|
|
287
|
-
} else {
|
|
288
|
-
_this2.logger.warn("Connection ".concat(_this2.connectionId, " receive timeout after ").concat(_this2.config.timeout, "ms"));
|
|
289
|
-
_this2.emit("error", new TimeoutError("No data received for ".concat(_this2.config.timeout, "ms")));
|
|
290
|
-
}
|
|
291
|
-
_this2.abort();
|
|
292
|
-
}
|
|
293
|
-
}, checkInterval);
|
|
294
|
-
}
|
|
295
|
-
}, {
|
|
296
|
-
key: "parseSSEData",
|
|
297
|
-
value: function parseSSEData(chunk) {
|
|
298
|
-
this.parser.parse(chunk);
|
|
299
|
-
if (!this.firstTokenReceived) {
|
|
300
|
-
this.firstTokenReceived = true;
|
|
301
|
-
this.emit("start", chunk);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}, {
|
|
305
|
-
key: "handleConnectionError",
|
|
306
|
-
value: function handleConnectionError(error) {
|
|
307
|
-
this.connectionInfo.error = error;
|
|
308
|
-
this.connectionManager.handleConnectionError(error);
|
|
309
|
-
this.setState(SSEConnectionState.ERROR);
|
|
310
|
-
this.emit("error", error);
|
|
311
|
-
}
|
|
312
|
-
}, {
|
|
313
|
-
key: "clearTimeouts",
|
|
314
|
-
value: function clearTimeouts() {
|
|
315
|
-
if (this.timeoutTimer) {
|
|
316
|
-
clearInterval(this.timeoutTimer);
|
|
317
|
-
this.timeoutTimer = void 0;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}, {
|
|
321
|
-
key: "setState",
|
|
322
|
-
value: function setState(newState) {
|
|
323
|
-
var oldState = this.state;
|
|
324
|
-
this.state = newState;
|
|
325
|
-
this.connectionInfo.state = newState;
|
|
326
|
-
var stateChangeEvent = {
|
|
327
|
-
connectionId: this.connectionId,
|
|
328
|
-
from: oldState,
|
|
329
|
-
to: newState,
|
|
330
|
-
timestamp: Date.now()
|
|
331
|
-
};
|
|
332
|
-
this.emit("stateChange", stateChangeEvent);
|
|
333
|
-
this.logger.debug("Connection ".concat(this.connectionId, " state: ").concat(oldState, " -> ").concat(newState));
|
|
334
|
-
}
|
|
335
|
-
}, {
|
|
336
|
-
key: "resetParser",
|
|
337
|
-
value: function resetParser() {
|
|
338
|
-
this.parser.reset();
|
|
339
|
-
}
|
|
340
|
-
}, {
|
|
341
|
-
key: "setupInternalEventHandlers",
|
|
342
|
-
value: function setupInternalEventHandlers() {
|
|
343
|
-
var _this3 = this;
|
|
344
|
-
this.on("error", function (error) {
|
|
345
|
-
_this3.logger.error("SSE Client ".concat(_this3.connectionId, " error:"), error);
|
|
346
|
-
});
|
|
347
|
-
this.on("complete", function (isAborted) {
|
|
348
|
-
_this3.logger.info("SSE Client ".concat(_this3.connectionId, " completed, aborted: ").concat(isAborted));
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
}, {
|
|
352
|
-
key: "generateConnectionId",
|
|
353
|
-
value: function generateConnectionId() {
|
|
354
|
-
var _this$connectionInfo;
|
|
355
|
-
var timestamp = ((_this$connectionInfo = this.connectionInfo) === null || _this$connectionInfo === void 0 ? void 0 : _this$connectionInfo.createdAt) || Date.now();
|
|
356
|
-
return "sse_".concat(timestamp, "_").concat(Math.random().toString(36).substr(2, 9));
|
|
357
|
-
}
|
|
358
|
-
}]);
|
|
359
|
-
}(SimpleEventEmitter);
|
|
360
|
-
|
|
361
|
-
export { SSEClient };
|
|
362
|
-
//# sourceMappingURL=sse-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sse-client.js","sources":["../../../../../pro-components/chat/chatbot/core/server/sse-client.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop, max-classes-per-file */\nimport EventEmitter from '../utils/eventEmitter';\nimport { LoggerManager } from '../utils/logger';\nimport { ConnectionManager } from './connection-manager';\nimport { ConnectionError, TimeoutError } from './errors';\nimport { type SSEEvent, SSEParser } from './sse-parser';\nimport {\n type ConnectionInfo,\n DEFAULT_SSE_CONFIG,\n type SSEClientConfig,\n SSEConnectionState,\n type StateChangeEvent,\n} from './types';\n\n/**\n * SSE Client\n * 采用分层设计,分离了连接管理、状态管理、事件解析等职责\n */\nexport class SSEClient extends EventEmitter {\n public readonly connectionId: string;\n\n private state = SSEConnectionState.DISCONNECTED;\n\n private controller?: AbortController | null;\n\n private reader?: ReadableStreamDefaultReader<string>;\n\n private connectionManager: ConnectionManager;\n\n private parser: SSEParser;\n\n private timeoutTimer?: ReturnType<typeof setInterval>; // 统一超时定时器\n\n private config: SSEClientConfig;\n\n private logger = LoggerManager.getLogger();\n\n private url: string;\n\n private connectionInfo: ConnectionInfo;\n\n private firstTokenReceived = false;\n\n constructor(url: string) {\n super();\n this.url = url;\n this.connectionId = this.generateConnectionId();\n this.logger = LoggerManager.getLogger();\n this.connectionManager = new ConnectionManager(this.connectionId);\n\n // 初始化 SSE 解析器\n this.parser = new SSEParser();\n this.parser.onMessage = (event: SSEEvent) => {\n this.emit('message', event);\n };\n\n this.connectionInfo = {\n id: this.connectionId,\n url,\n state: this.state,\n createdAt: Date.now(),\n retryCount: 0,\n lastActivity: Date.now(),\n stats: {},\n };\n\n this.setupInternalEventHandlers();\n }\n\n /**\n * 连接 SSE 服务\n */\n async connect(config: SSEClientConfig): Promise<void> {\n if (this.state === SSEConnectionState.CONNECTED || this.state === SSEConnectionState.CONNECTING) {\n return;\n }\n\n this.config = {\n ...DEFAULT_SSE_CONFIG,\n ...config,\n headers: {\n ...DEFAULT_SSE_CONFIG.headers,\n ...config.headers,\n },\n };\n\n this.setState(SSEConnectionState.CONNECTING);\n this.connectionManager.startConnection();\n\n try {\n // 启动统一超时监控\n this.startTimeoutMonitor();\n\n await this.establishConnection();\n this.setState(SSEConnectionState.CONNECTED);\n this.connectionManager.onConnectionSuccess();\n await this.readStream();\n } catch (error) {\n this.handleConnectionError(error as Error);\n }\n }\n\n /**\n * 关闭连接\n */\n async abort(): Promise<void> {\n if (this.state === SSEConnectionState.DISCONNECTED || this.state === SSEConnectionState.CLOSING) {\n return;\n }\n\n this.setState(SSEConnectionState.CLOSING);\n\n try {\n if (this.reader) {\n await this.reader.cancel();\n this.reader = undefined;\n }\n\n if (this.controller && !this.controller.signal.aborted) {\n this.controller.abort();\n }\n\n this.connectionManager.cleanup();\n this.resetParser();\n this.emit('complete', true);\n } catch (error) {\n if (error.name !== 'AbortError') {\n this.logger.error('stream abort failed:', error);\n this.emit('error', error);\n }\n } finally {\n this.clearTimeouts();\n this.controller = null;\n this.setState(SSEConnectionState.CLOSED);\n }\n }\n\n /**\n * 获取连接状态\n */\n getStatus(): SSEConnectionState {\n return this.state;\n }\n\n /**\n * 获取连接信息\n */\n getInfo(): ConnectionInfo {\n return {\n ...this.connectionInfo,\n ...this.connectionManager.getConnectionInfo(),\n };\n }\n\n /**\n * 建立连接\n */\n private async establishConnection(): Promise<void> {\n this.controller = new AbortController();\n\n try {\n const response = await fetch(this.url, {\n ...this.config,\n signal: this.controller.signal,\n headers: {\n ...this.config.headers,\n Accept: 'text/event-stream',\n 'Cache-Control': 'no-cache',\n },\n });\n\n if (!response.body || !response.ok) {\n this.emit(\n 'error',\n new ConnectionError(`HTTP ${response.status}: ${response.statusText}`, response.status, response),\n );\n return;\n }\n this.reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n } catch (error: any) {\n if (error.name !== 'AbortError') {\n this.logger.error('sse request failed:', error);\n this.emit('error', error);\n }\n }\n }\n\n /**\n * 读取流数据\n */\n private async readStream(): Promise<void> {\n try {\n while (this.state === SSEConnectionState.CONNECTED && this.reader) {\n // eslint-disable no-await-in-loop\n const { done, value } = await this.reader.read();\n\n if (done) {\n this.logger.info(`Connection ${this.connectionId} stream ended normally`);\n this.emit('complete', false); // 发出流结束事件\n this.setState(SSEConnectionState.DISCONNECTED);\n this.clearTimeouts();\n return;\n }\n\n // 更新活动时间\n this.connectionInfo.lastActivity = Date.now();\n\n // 直接解析SSE数据\n this.parseSSEData(value);\n }\n } catch (error) {\n if (!this.controller?.signal.aborted) {\n this.logger.error(`Stream reading error for ${this.connectionId}:`, error);\n this.handleConnectionError(error as Error);\n } else {\n this.logger.debug(`Stream reading stopped for ${this.connectionId} (aborted)`);\n }\n }\n }\n\n /**\n * 启动统一超时监控\n */\n private startTimeoutMonitor(): void {\n if (!this.config.timeout || this.config.timeout <= 0) return;\n\n // 检查间隔为超时时间的一半,但不超过5秒\n const checkInterval = Math.min(this.config.timeout / 2, 5000);\n\n this.timeoutTimer = setInterval(() => {\n const now = Date.now();\n const timeSinceLastActivity = now - this.connectionInfo.lastActivity;\n\n if (timeSinceLastActivity >= this.config.timeout!) {\n // 根据当前状态决定超时类型\n if (this.state === SSEConnectionState.CONNECTING) {\n this.logger.warn(`Connection ${this.connectionId} establishment timeout after ${this.config.timeout}ms`);\n this.emit('error', new TimeoutError(`Connection establishment timed out after ${this.config.timeout}ms`));\n } else {\n this.logger.warn(`Connection ${this.connectionId} receive timeout after ${this.config.timeout}ms`);\n this.emit('error', new TimeoutError(`No data received for ${this.config.timeout}ms`));\n }\n\n this.abort(); // 触发连接中断\n }\n }, checkInterval);\n }\n\n /**\n * 解析SSE数据\n */\n private parseSSEData(chunk: string): void {\n // 使用独立的 SSE 解析器处理数据\n this.parser.parse(chunk);\n if (!this.firstTokenReceived) {\n this.firstTokenReceived = true;\n this.emit('start', chunk); // 派发start事件\n }\n }\n\n /**\n * 简化的错误处理\n */\n private handleConnectionError(error: Error) {\n this.connectionInfo.error = error;\n this.connectionManager.handleConnectionError(error);\n this.setState(SSEConnectionState.ERROR);\n this.emit('error', error);\n }\n\n /**\n * 清理超时定时器\n */\n private clearTimeouts(): void {\n if (this.timeoutTimer) {\n clearInterval(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * 设置连接状态\n */\n private setState(newState: SSEConnectionState) {\n const oldState = this.state;\n this.state = newState;\n this.connectionInfo.state = newState;\n\n const stateChangeEvent: StateChangeEvent = {\n connectionId: this.connectionId,\n from: oldState,\n to: newState,\n timestamp: Date.now(),\n };\n\n this.emit('stateChange', stateChangeEvent);\n this.logger.debug(`Connection ${this.connectionId} state: ${oldState} -> ${newState}`);\n }\n\n /**\n * 重置解析器状态\n */\n private resetParser(): void {\n this.parser.reset();\n }\n\n /**\n * 设置内部事件处理器\n */\n private setupInternalEventHandlers(): void {\n this.on('error', (error) => {\n this.logger.error(`SSE Client ${this.connectionId} error:`, error);\n });\n\n this.on('complete', (isAborted) => {\n this.logger.info(`SSE Client ${this.connectionId} completed, aborted: ${isAborted}`);\n });\n }\n\n /**\n * 生成连接ID\n */\n private generateConnectionId(): string {\n // 使用this来访问实例属性,满足linter要求\n const timestamp = this.connectionInfo?.createdAt || Date.now();\n return `sse_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"names":["SSEClient","url","_this","_classCallCheck","_callSuper","_defineProperty","SSEConnectionState","DISCONNECTED","LoggerManager","getLogger","connectionId","generateConnectionId","logger","connectionManager","ConnectionManager","parser","SSEParser","onMessage","event","emit","connectionInfo","id","state","createdAt","Date","now","retryCount","lastActivity","stats","setupInternalEventHandlers","_inherits","_EventEmitter","_createClass","key","value","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","config","_t","wrap","_context","prev","next","CONNECTED","CONNECTING","abrupt","_objectSpread","DEFAULT_SSE_CONFIG","headers","setState","startConnection","startTimeoutMonitor","establishConnection","onConnectionSuccess","readStream","handleConnectionError","stop","connect","_callee2","_t2","_context2","CLOSING","reader","cancel","controller","signal","aborted","abort","cleanup","resetParser","name","error","clearTimeouts","CLOSED","finish","_abort","apply","arguments","getStatus","getInfo","getConnectionInfo","_establishConnection","_callee3","response","_t3","_context3","AbortController","fetch","Accept","sent","body","ok","ConnectionError","status","statusText","pipeThrough","TextDecoderStream","getReader","_readStream","_callee4","_yield$this$reader$re","done","_this$controller","_t4","_context4","read","info","concat","parseSSEData","debug","_this2","timeout","checkInterval","Math","min","timeoutTimer","setInterval","timeSinceLastActivity","warn","TimeoutError","chunk","parse","firstTokenReceived","ERROR","clearInterval","newState","oldState","stateChangeEvent","from","to","timestamp","reset","_this3","on","isAborted","_this$connectionInfo","random","toString","substr","EventEmitter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkBaA,IAAAA;EAyBX,SAAAA,SAAAA,CAAYC,GAAa,EAAA;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAAC,IAAAA,eAAA,OAAAH,SAAA,CAAA,CAAA;IACjBE,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAJ,SAAA,CAAA,CAAA;AAAAK,IAAAA,eAAA,CAAAH,KAAA,EAvBQI,OAAAA,EAAAA,kBAAmB,CAAAC,YAAA,CAAA,CAAA;AAAAF,IAAAA,eAAA,CAAAH,KAAA,EAAA,QAAA,EAclBM,cAAcC,SAAU,EAAA,CAAA,CAAA;IAAAJ,eAAA,CAAAH,KAAA,EAAA,oBAAA,EAMZ,KAAA,CAAA,CAAA;IAI3BA,KAAA,CAAKD,GAAM,GAAAA,GAAA,CAAA;AACNC,IAAAA,KAAA,CAAAQ,YAAA,GAAeR,KAAA,CAAKS,oBAAqB,EAAA,CAAA;AACzCT,IAAAA,KAAA,CAAAU,MAAA,GAASJ,cAAcC,SAAU,EAAA,CAAA;IACtCP,KAAA,CAAKW,iBAAoB,GAAA,IAAIC,iBAAkB,CAAAZ,KAAA,CAAKQ,YAAY,CAAA,CAAA;AAG3DR,IAAAA,KAAA,CAAAa,MAAA,GAAS,IAAIC,SAAU,EAAA,CAAA;AACvBd,IAAAA,KAAA,CAAAa,MAAA,CAAOE,SAAY,GAAA,UAACC,KAAoB,EAAA;AACtChB,MAAAA,KAAA,CAAAiB,IAAA,CAAK,WAAWD,KAAK,CAAA,CAAA;KAC5B,CAAA;IAEAhB,KAAA,CAAKkB,cAAiB,GAAA;MACpBC,IAAInB,KAAA,CAAKQ,YAAA;AACTT,MAAAA,GAAA,EAAAA,GAAA;MACAqB,OAAOpB,KAAA,CAAKoB,KAAA;AACZC,MAAAA,SAAA,EAAWC,KAAKC,GAAI,EAAA;AACpBC,MAAAA,UAAY,EAAA,CAAA;AACZC,MAAAA,YAAA,EAAcH,KAAKC,GAAI,EAAA;AACvBG,MAAAA,OAAO,EAAC;KACV,CAAA;IAEA1B,KAAA,CAAK2B,0BAA2B,EAAA,CAAA;AAAA,IAAA,OAAA3B,KAAA,CAAA;AAClC,GAAA;EAAA4B,SAAA,CAAA9B,SAAA,EAAA+B,aAAA,CAAA,CAAA;EAAA,OAAAC,YAAA,CAAAhC,SAAA,EAAA,CAAA;IAAAiC,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAC,QAAA,GAAAC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAAC,OAAAA,CAAcC,MAAwC,EAAA;AAAA,QAAA,IAAAC,EAAA,CAAA;AAAA,QAAA,OAAAJ,mBAAA,CAAAK,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EAChD,KAAKvB,KAAU,KAAAhB,kBAAA,CAAmBwC,aAAa,IAAK,CAAAxB,KAAA,KAAUhB,mBAAmByC,UAAY,CAAA,EAAA;AAAAJ,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAAF,QAAA,CAAAK,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAIjG,IAAA,CAAKR,MAAS,GAAAS,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAA,EAAA,EACTC,kBAAA,CAAA,EACAV,MAAA,CAAA,EAAA,EAAA,EAAA;gBACHW,OAAS,EAAAF,aAAA,CAAAA,aAAA,CAAA,EAAA,EACJC,kBAAmB,CAAAC,OAAA,CAAA,EACnBX,MAAO,CAAAW,OAAA,CAAA;eAEd,CAAA,CAAA;AAEK,cAAA,IAAA,CAAAC,QAAA,CAAS9C,mBAAmByC,UAAU,CAAA,CAAA;AAC3C,cAAA,IAAA,CAAKlC,kBAAkBwC,eAAgB,EAAA,CAAA;AAAAV,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;cAIrC,IAAA,CAAKU,mBAAoB,EAAA,CAAA;AAAAX,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAEnB,KAAKU,mBAAoB,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAC1B,cAAA,IAAA,CAAAH,QAAA,CAAS9C,mBAAmBwC,SAAS,CAAA,CAAA;AAC1C,cAAA,IAAA,CAAKjC,kBAAkB2C,mBAAoB,EAAA,CAAA;AAAAb,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACrC,KAAKY,UAAW,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAd,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAAF,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAH,cAAAA,EAAA,GAAAE,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEtB,cAAA,IAAA,CAAKe,wBAAoC,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAf,QAAA,CAAAgB,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAApB,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAE7C,CAAA,CAAA,CAAA;MAAA,SA5BMqB;;;aAAAA;;;;;2EAiCN,SAAAC,QAAA,GAAA;AAAA,QAAA,IAAAC,GAAA,CAAA;AAAA,QAAA,OAAAzB,mBAAA,CAAAK,IAAA,CAAA,UAAAqB,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAnB,IAAA,GAAAmB,SAAA,CAAAlB,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EACM,KAAKvB,KAAU,KAAAhB,kBAAA,CAAmBC,gBAAgB,IAAK,CAAAe,KAAA,KAAUhB,mBAAmB0D,OAAS,CAAA,EAAA;AAAAD,gBAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAAkB,SAAA,CAAAf,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAI5F,cAAA,IAAA,CAAAI,QAAA,CAAS9C,mBAAmB0D,OAAO,CAAA,CAAA;AAAAD,cAAAA,SAAA,CAAAnB,IAAA,GAAA,CAAA,CAAA;cAAA,IAGlC,CAAA,KAAKqB,MAAQ,EAAA;AAAAF,gBAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAAkB,cAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACT,IAAA,CAAKoB,OAAOC,MAAO,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AACzB,cAAA,IAAA,CAAKD,MAAS,GAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAGhB,cAAA,IAAI,KAAKE,UAAc,IAAA,CAAC,IAAK,CAAAA,UAAA,CAAWC,OAAOC,OAAS,EAAA;AACtD,gBAAA,IAAA,CAAKF,WAAWG,KAAM,EAAA,CAAA;AACxB,eAAA;AAEA,cAAA,IAAA,CAAKzD,kBAAkB0D,OAAQ,EAAA,CAAA;cAC/B,IAAA,CAAKC,WAAY,EAAA,CAAA;AACZ,cAAA,IAAA,CAAArD,IAAA,CAAK,YAAY,IAAI,CAAA,CAAA;AAAA4C,cAAAA,SAAA,CAAAlB,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAAkB,cAAAA,SAAA,CAAAnB,IAAA,GAAA,CAAA,CAAA;AAAAkB,cAAAA,GAAA,GAAAC,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEtB,cAAA,IAAAD,GAAA,CAAMW,SAAS,YAAc,EAAA;gBAC1B,IAAA,CAAA7D,MAAA,CAAO8D,KAAM,CAAA,sBAAA,EAAAZ,GAA6B,CAAA,CAAA;AAC1C,gBAAA,IAAA,CAAA3C,IAAA,CAAK,YAAc,CAAA,CAAA;AAC1B,eAAA;AAAA,YAAA,KAAA,CAAA;AAAA4C,cAAAA,SAAA,CAAAnB,IAAA,GAAA,CAAA,CAAA;cAEA,IAAA,CAAK+B,aAAc,EAAA,CAAA;cACnB,IAAA,CAAKR,UAAa,GAAA,IAAA,CAAA;AACb,cAAA,IAAA,CAAAf,QAAA,CAAS9C,mBAAmBsE,MAAM,CAAA,CAAA;cAAA,OAAAb,SAAA,CAAAc,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAd,SAAA,CAAAJ,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAE,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAE3C,CAAA,CAAA,CAAA;AAAA,MAAA,SA9BMS,KAAuBA,GAAA;AAAA,QAAA,OAAAQ,MAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAvBV,KAAuB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAArC,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAmC7B,SAAA+C,SAAgCA,GAAA;MAC9B,OAAO,IAAK,CAAA3D,KAAA,CAAA;AACd,KAAA;AAAA,GAAA,EAAA;IAAAW,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAgD,OAA0BA,GAAA;AACjB,MAAA,OAAAjC,aAAA,CAAAA,aAAA,CAAA,EAAA,EACF,IAAK,CAAA7B,cAAA,CACL,EAAA,IAAK,CAAAP,iBAAA,CAAkBsE,iBAAkB,EAAA,CAAA,CAAA;AAEhD,KAAA;AAAA,GAAA,EAAA;IAAAlD,GAAA,EAAA,qBAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAkD,oBAAA,GAAAhD,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAA+C,QAAA,GAAA;QAAA,IAAAC,QAAA,EAAAC,GAAA,CAAA;AAAA,QAAA,OAAAlD,mBAAA,CAAAK,IAAA,CAAA,UAAA8C,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA5C,IAAA,GAAA4C,SAAA,CAAA3C,IAAA;AAAA,YAAA,KAAA,CAAA;AACO,cAAA,IAAA,CAAAsB,UAAA,GAAa,IAAIsB,eAAgB,EAAA,CAAA;AAAAD,cAAAA,SAAA,CAAA5C,IAAA,GAAA,CAAA,CAAA;AAAA4C,cAAAA,SAAA,CAAA3C,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAGb6C,KAAM,CAAA,IAAA,CAAKzF,GAAK,EAAAgD,aAAA,CAAAA,aAAA,CAAA,EAAA,EAClC,IAAK,CAAAT,MAAA,CAAA,EAAA,EAAA,EAAA;AACR4B,gBAAAA,MAAA,EAAQ,KAAKD,UAAW,CAAAC,MAAA;gBACxBjB,OAAS,EAAAF,aAAA,CAAAA,aAAA,KACJ,KAAKT,MAAO,CAAAW,OAAA,CAAA,EAAA,EAAA,EAAA;AACfwC,kBAAAA,MAAQ,EAAA,mBAAA;AACR,kBAAA,eAAiB,EAAA,UAAA;AAAA,iBAAA,CAAA;AACnB,eAAA,CACD,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cARKL,QAAW,GAAAE,SAAA,CAAAI,IAAA,CAAA;cAAA,IAUb,EAAA,CAACN,QAAA,CAASO,IAAQ,IAAA,CAACP,SAASQ,EAAI,CAAA,EAAA;AAAAN,gBAAAA,SAAA,CAAA3C,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAC7B,IAAA,CAAA1B,IAAA,CACH,OAAA,EACA,IAAI4E,+BAAwBT,QAAA,CAASU,qBAAWV,QAAS,CAAAW,UAAA,CAAA,EAAcX,QAAS,CAAAU,MAAA,EAAQV,QAAQ,CAClG,CAAA,CAAA;cAAA,OAAAE,SAAA,CAAAxC,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAGG,cAAA,IAAA,CAAAiB,MAAA,GAASqB,SAASO,IAAK,CAAAK,WAAA,CAAY,IAAIC,iBAAkB,EAAC,EAAEC,SAAU,EAAA,CAAA;AAAAZ,cAAAA,SAAA,CAAA3C,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAA2C,cAAAA,SAAA,CAAA5C,IAAA,GAAA,CAAA,CAAA;AAAA2C,cAAAA,GAAA,GAAAC,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEvE,cAAA,IAAAD,GAAA,CAAMd,SAAS,YAAc,EAAA;gBAC1B,IAAA,CAAA7D,MAAA,CAAO8D,KAAM,CAAA,qBAAA,EAAAa,GAA4B,CAAA,CAAA;AACzC,gBAAA,IAAA,CAAApE,IAAA,CAAK,YAAc,CAAA,CAAA;AAC1B,eAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAqE,SAAA,CAAA7B,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAA0B,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAEJ,CAAA,CAAA,CAAA;AAAA,MAAA,SA5Bc9B,mBAAqCA,GAAA;AAAA,QAAA,OAAA6B,oBAAA,CAAAL,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAArCzB,mBAAqC,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAtB,GAAA,EAAA,YAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAmE,WAAA,GAAAjE,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAiCnD,SAAAgE,QAAA,GAAA;QAAA,IAAAC,qBAAA,EAAAC,IAAA,EAAAtE,KAAA,EAAAuE,gBAAA,EAAAC,GAAA,CAAA;AAAA,QAAA,OAAArE,mBAAA,CAAAK,IAAA,CAAA,UAAAiE,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA/D,IAAA,GAAA+D,SAAA,CAAA9D,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA8D,cAAAA,SAAA,CAAA/D,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAAA,IAEW,EAAA,IAAK,CAAAtB,KAAA,KAAUhB,kBAAmB,CAAAwC,SAAA,IAAa,KAAKmB,MAAQ,CAAA,EAAA;AAAA0C,gBAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAA8D,cAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAEnC,IAAA,CAAKoB,OAAO2C,IAAK,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAAAL,qBAAA,GAAAI,SAAA,CAAAf,IAAA,CAAA;cAAvCY,IAAM,GAAAD,qBAAA,CAANC,IAAM,CAAA;cAAAtE,KAAA,GAAAqE,qBAAA,CAAArE,KAAA,CAAA;AAAA,cAAA,IAAA,CAEVsE,IAAM,EAAA;AAAAG,gBAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cACR,IAAA,CAAKjC,MAAO,CAAAiG,IAAA,CAAA,aAAA,CAAAC,MAAA,CAAmB,IAAA,CAAKpG,YAAoC,EAAA,wBAAA,CAAA,CAAA,CAAA;AACnE,cAAA,IAAA,CAAAS,IAAA,CAAK,YAAY,KAAK,CAAA,CAAA;AACtB,cAAA,IAAA,CAAAiC,QAAA,CAAS9C,mBAAmBC,YAAY,CAAA,CAAA;cAC7C,IAAA,CAAKoE,aAAc,EAAA,CAAA;cAAA,OAAAgC,SAAA,CAAA3D,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAKhB,IAAA,CAAA5B,cAAA,CAAeO,YAAe,GAAAH,IAAA,CAAKC,GAAI,EAAA,CAAA;AAG5C,cAAA,IAAA,CAAKsF,aAAa7E,KAAK,CAAA,CAAA;AAAAyE,cAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAA8D,cAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAA8D,cAAAA,SAAA,CAAA/D,IAAA,GAAA,CAAA,CAAA;AAAA8D,cAAAA,GAAA,GAAAC,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGzB,cAAA,IAAI,EAAAF,CAAAA,gBAAA,GAAC,IAAA,CAAKtC,UAAY,MAAA,IAAA,IAAAsC,gBAAA,KAAA,KAAA,CAAA,IAAjBA,gBAAA,CAAiBrC,MAAA,CAAOC,OAAS,CAAA,EAAA;AACpC,gBAAA,IAAA,CAAKzD,MAAO,CAAA8D,KAAA,CAAAoC,2BAAAA,CAAAA,MAAA,CAAkC,IAAA,CAAKpG,uBAAsB,CAAA,CAAA;AACzE,gBAAA,IAAA,CAAKgD,yBAAoC,CAAA,CAAA;AAC3C,eAAO,MAAA;gBACL,IAAA,CAAK9C,MAAO,CAAAoG,KAAA,CAAA,6BAAA,CAAAF,MAAA,CAAoC,IAAA,CAAKpG,YAAwB,EAAA,YAAA,CAAA,CAAA,CAAA;AAC/E,eAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAiG,SAAA,CAAAhD,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAA2C,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAEJ,CAAA,CAAA,CAAA;AAAA,MAAA,SA5Bc7C,UAA4BA,GAAA;AAAA,QAAA,OAAA4C,WAAA,CAAAtB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAA5BvB,UAA4B,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAxB,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAiClC,SAAAoB,mBAA4BA,GAAA;AAAA,MAAA,IAAA2D,MAAA,GAAA,IAAA,CAAA;AAClC,MAAA,IAAI,CAAC,IAAK,CAAAzE,MAAA,CAAO0E,OAAW,IAAA,IAAA,CAAK1E,OAAO0E,OAAW,IAAA,CAAA,EAAG,OAAA;AAGtD,MAAA,IAAMC,gBAAgBC,IAAK,CAAAC,GAAA,CAAI,KAAK7E,MAAO,CAAA0E,OAAA,GAAU,GAAG,GAAI,CAAA,CAAA;AAEvD,MAAA,IAAA,CAAAI,YAAA,GAAeC,YAAY,YAAM;AAC9B,QAAA,IAAA9F,GAAA,GAAMD,KAAKC,GAAI,EAAA,CAAA;QACf,IAAA+F,qBAAA,GAAwB/F,GAAM,GAAAwF,MAAA,CAAK7F,cAAe,CAAAO,YAAA,CAAA;AAEpD,QAAA,IAAA6F,qBAAA,IAAyBP,MAAK,CAAAzE,MAAA,CAAO0E,OAAU,EAAA;AAE7C,UAAA,IAAAD,MAAA,CAAK3F,KAAU,KAAAhB,kBAAA,CAAmByC,UAAY,EAAA;AAChDkE,YAAAA,MAAA,CAAKrG,OAAO6G,IAAK,CAAAX,aAAAA,CAAAA,MAAA,CAAcG,OAAKvG,YAA4C,EAAAoG,+BAAAA,CAAAA,CAAAA,MAAA,CAAAG,MAAA,CAAKzE,OAAO0E,OAAW,OAAA,CAAA,CAAA;AAClGD,YAAAA,MAAA,CAAA9F,IAAA,CAAK,SAAS,IAAIuG,YAAA,CAAA,2CAAA,CAAAZ,MAAA,CAAyDG,MAAK,CAAAzE,MAAA,CAAO0E,cAAW,CAAC,CAAA,CAAA;AAC1G,WAAO,MAAA;AACLD,YAAAA,MAAA,CAAKrG,OAAO6G,IAAK,CAAAX,aAAAA,CAAAA,MAAA,CAAcG,OAAKvG,YAAsC,EAAAoG,yBAAAA,CAAAA,CAAAA,MAAA,CAAAG,MAAA,CAAKzE,OAAO0E,OAAW,OAAA,CAAA,CAAA;AAC5FD,YAAAA,MAAA,CAAA9F,IAAA,CAAK,SAAS,IAAIuG,YAAA,CAAA,uBAAA,CAAAZ,MAAA,CAAqCG,MAAK,CAAAzE,MAAA,CAAO0E,cAAW,CAAC,CAAA,CAAA;AACtF,WAAA;UAEAD,MAAA,CAAK3C,KAAM,EAAA,CAAA;AACb,SAAA;SACC6C,aAAa,CAAA,CAAA;AAClB,KAAA;AAAA,GAAA,EAAA;IAAAlF,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAA6E,aAAaY,KAAqB,EAAA;AAEnC,MAAA,IAAA,CAAA5G,MAAA,CAAO6G,MAAMD,KAAK,CAAA,CAAA;AACnB,MAAA,IAAA,CAAC,KAAKE,kBAAoB,EAAA;QAC5B,IAAA,CAAKA,kBAAqB,GAAA,IAAA,CAAA;AACrB,QAAA,IAAA,CAAA1G,IAAA,CAAK,SAASwG,KAAK,CAAA,CAAA;AAC1B,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAA1F,GAAA,EAAA,uBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAwB,sBAAsBgB,KAAc,EAAA;AAC1C,MAAA,IAAA,CAAKtD,eAAesD,KAAQ,GAAAA,KAAA,CAAA;AACvB,MAAA,IAAA,CAAA7D,iBAAA,CAAkB6C,sBAAsBgB,KAAK,CAAA,CAAA;AAC7C,MAAA,IAAA,CAAAtB,QAAA,CAAS9C,mBAAmBwH,KAAK,CAAA,CAAA;AACjC,MAAA,IAAA,CAAA3G,IAAA,CAAK,SAASuD,KAAK,CAAA,CAAA;AAC1B,KAAA;AAAA,GAAA,EAAA;IAAAzC,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAyC,aAAsBA,GAAA;MAC5B,IAAI,KAAK2C,YAAc,EAAA;AACrBS,QAAAA,aAAA,CAAc,KAAKT,YAAY,CAAA,CAAA;AAC/B,QAAA,IAAA,CAAKA,YAAe,GAAA,KAAA,CAAA,CAAA;AACtB,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAArF,GAAA,EAAA,UAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAkB,SAAS4E,QAA8B,EAAA;AAC7C,MAAA,IAAMC,WAAW,IAAK,CAAA3G,KAAA,CAAA;MACtB,IAAA,CAAKA,KAAQ,GAAA0G,QAAA,CAAA;AACb,MAAA,IAAA,CAAK5G,eAAeE,KAAQ,GAAA0G,QAAA,CAAA;AAE5B,MAAA,IAAME,gBAAqC,GAAA;QACzCxH,cAAc,IAAK,CAAAA,YAAA;AACnByH,QAAAA,IAAM,EAAAF,QAAA;AACNG,QAAAA,EAAI,EAAAJ,QAAA;AACJK,QAAAA,SAAA,EAAW7G,KAAKC,GAAI,EAAA;OACtB,CAAA;AAEK,MAAA,IAAA,CAAAN,IAAA,CAAK,eAAe+G,gBAAgB,CAAA,CAAA;AACzC,MAAA,IAAA,CAAKtH,OAAOoG,KAAM,CAAAF,aAAAA,CAAAA,MAAA,CAAc,IAAK,CAAApG,YAAA,EAAAoG,UAAAA,CAAAA,CAAAA,MAAA,CAAuBmB,yBAAeD,QAAU,CAAA,CAAA,CAAA;AACvF,KAAA;AAAA,GAAA,EAAA;IAAA/F,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAsC,WAAoBA,GAAA;AAC1B,MAAA,IAAA,CAAKzD,OAAOuH,KAAM,EAAA,CAAA;AACpB,KAAA;AAAA,GAAA,EAAA;IAAArG,GAAA,EAAA,4BAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAL,0BAAmCA,GAAA;AAAA,MAAA,IAAA0G,MAAA,GAAA,IAAA,CAAA;AACpC,MAAA,IAAA,CAAAC,EAAA,CAAG,OAAS,EAAA,UAAC9D,KAAU,EAAA;AAC1B6D,QAAAA,MAAA,CAAK3H,MAAO,CAAA8D,KAAA,CAAAoC,aAAAA,CAAAA,MAAA,CAAoByB,MAAA,CAAK7H,cAAuBgE,SAAAA,CAAAA,EAAAA,KAAK,CAAA,CAAA;AACnE,OAAC,CAAA,CAAA;AAEI,MAAA,IAAA,CAAA8D,EAAA,CAAG,UAAY,EAAA,UAACC,SAAc,EAAA;AACjCF,QAAAA,MAAA,CAAK3H,MAAO,CAAAiG,IAAA,eAAAC,MAAA,CAAmByB,MAAA,CAAK7H,8CAAoC+H,SAAW,CAAA,CAAA,CAAA;AACrF,OAAC,CAAA,CAAA;AACH,KAAA;AAAA,GAAA,EAAA;IAAAxG,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAvB,oBAA+BA,GAAA;AAAA,MAAA,IAAA+H,oBAAA,CAAA;AAErC,MAAA,IAAML,SAAY,GAAA,CAAA,CAAAK,oBAAA,GAAA,IAAA,CAAKtH,cAAgB,MAAAsH,IAAAA,IAAAA,oBAAA,KAArBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqBnH,SAAA,KAAaC,KAAKC,GAAI,EAAA,CAAA;MACtD,OAAAqF,MAAAA,CAAAA,MAAA,CAAOuB,SAAa,EAAA,GAAA,CAAA,CAAAvB,MAAA,CAAAM,IAAA,CAAKuB,MAAO,EAAA,CAAEC,SAAS,EAAE,CAAA,CAAEC,MAAO,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnE,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CApT6BC,kBAAa;;;;"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SSE 事件接口
|
|
3
|
-
*/
|
|
4
|
-
export interface SSEEvent {
|
|
5
|
-
event?: string;
|
|
6
|
-
data?: any;
|
|
7
|
-
id?: string;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* SSE 事件流解析器
|
|
11
|
-
*/
|
|
12
|
-
export declare class SSEParser {
|
|
13
|
-
private eventBuffer;
|
|
14
|
-
private currentEvent;
|
|
15
|
-
private logger;
|
|
16
|
-
onMessage?: (msg: SSEEvent) => void;
|
|
17
|
-
/**
|
|
18
|
-
* 解析SSE数据块
|
|
19
|
-
*/
|
|
20
|
-
parse(chunk: string): void;
|
|
21
|
-
/**
|
|
22
|
-
* 处理SSE行数据
|
|
23
|
-
*/
|
|
24
|
-
private processSSELine;
|
|
25
|
-
/**
|
|
26
|
-
* 发送当前事件
|
|
27
|
-
*/
|
|
28
|
-
private emitCurrentEvent;
|
|
29
|
-
/**
|
|
30
|
-
* 重置解析器状态
|
|
31
|
-
*/
|
|
32
|
-
reset(): void;
|
|
33
|
-
/**
|
|
34
|
-
* 获取当前缓冲区大小
|
|
35
|
-
*/
|
|
36
|
-
getBufferSize(): number;
|
|
37
|
-
/**
|
|
38
|
-
* 获取当前事件状态
|
|
39
|
-
*/
|
|
40
|
-
getCurrentEvent(): {
|
|
41
|
-
event?: string;
|
|
42
|
-
data?: string;
|
|
43
|
-
id?: string;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* 检查是否有未完成的事件
|
|
47
|
-
*/
|
|
48
|
-
hasIncompleteEvent(): boolean;
|
|
49
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tdesign v1.0.0-beta.3
|
|
3
|
-
* (c) 2025 tdesign
|
|
4
|
-
* @license MIT
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
8
|
-
import _createClass from '@babel/runtime/helpers/createClass';
|
|
9
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
10
|
-
import { LoggerManager } from '../utils/logger.js';
|
|
11
|
-
|
|
12
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
-
var SSEParser = /*#__PURE__*/function () {
|
|
15
|
-
function SSEParser() {
|
|
16
|
-
_classCallCheck(this, SSEParser);
|
|
17
|
-
_defineProperty(this, "eventBuffer", "");
|
|
18
|
-
_defineProperty(this, "currentEvent", {});
|
|
19
|
-
_defineProperty(this, "logger", LoggerManager.getLogger());
|
|
20
|
-
}
|
|
21
|
-
return _createClass(SSEParser, [{
|
|
22
|
-
key: "parse",
|
|
23
|
-
value: function parse(chunk) {
|
|
24
|
-
this.eventBuffer += chunk;
|
|
25
|
-
var newlineIndex;
|
|
26
|
-
while ((newlineIndex = this.eventBuffer.indexOf("\n")) !== -1) {
|
|
27
|
-
var line = this.eventBuffer.slice(0, newlineIndex).replace(/\r$/, "");
|
|
28
|
-
this.eventBuffer = this.eventBuffer.slice(newlineIndex + 1);
|
|
29
|
-
this.processSSELine(line);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}, {
|
|
33
|
-
key: "processSSELine",
|
|
34
|
-
value: function processSSELine(line) {
|
|
35
|
-
if (line === "") {
|
|
36
|
-
this.emitCurrentEvent();
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
var colonIndex = line.indexOf(":");
|
|
40
|
-
if (colonIndex === 0) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
var field;
|
|
44
|
-
var value;
|
|
45
|
-
if (colonIndex === -1) {
|
|
46
|
-
field = line.trim();
|
|
47
|
-
value = "";
|
|
48
|
-
} else {
|
|
49
|
-
field = line.slice(0, colonIndex).trim();
|
|
50
|
-
value = line.slice(colonIndex + 1).replace(/^ /, "");
|
|
51
|
-
}
|
|
52
|
-
switch (field) {
|
|
53
|
-
case "event":
|
|
54
|
-
this.currentEvent.event = value;
|
|
55
|
-
break;
|
|
56
|
-
case "data":
|
|
57
|
-
if (this.currentEvent.data === void 0) {
|
|
58
|
-
this.currentEvent.data = value;
|
|
59
|
-
} else {
|
|
60
|
-
this.currentEvent.data += "\n".concat(value);
|
|
61
|
-
}
|
|
62
|
-
break;
|
|
63
|
-
case "id":
|
|
64
|
-
this.currentEvent.id = value;
|
|
65
|
-
break;
|
|
66
|
-
default:
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}, {
|
|
71
|
-
key: "emitCurrentEvent",
|
|
72
|
-
value: function emitCurrentEvent() {
|
|
73
|
-
if (this.currentEvent.data !== void 0 && this.onMessage) {
|
|
74
|
-
try {
|
|
75
|
-
var data;
|
|
76
|
-
try {
|
|
77
|
-
data = JSON.parse(this.currentEvent.data);
|
|
78
|
-
} catch (_unused) {
|
|
79
|
-
data = this.currentEvent.data;
|
|
80
|
-
}
|
|
81
|
-
this.onMessage({
|
|
82
|
-
event: this.currentEvent.event || "",
|
|
83
|
-
data: data
|
|
84
|
-
});
|
|
85
|
-
} catch (error) {
|
|
86
|
-
this.logger.error("Error emitting event:", error);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
this.currentEvent = {};
|
|
90
|
-
}
|
|
91
|
-
}, {
|
|
92
|
-
key: "reset",
|
|
93
|
-
value: function reset() {
|
|
94
|
-
this.eventBuffer = "";
|
|
95
|
-
this.currentEvent = {};
|
|
96
|
-
}
|
|
97
|
-
}, {
|
|
98
|
-
key: "getBufferSize",
|
|
99
|
-
value: function getBufferSize() {
|
|
100
|
-
return this.eventBuffer.length;
|
|
101
|
-
}
|
|
102
|
-
}, {
|
|
103
|
-
key: "getCurrentEvent",
|
|
104
|
-
value: function getCurrentEvent() {
|
|
105
|
-
return _objectSpread({}, this.currentEvent);
|
|
106
|
-
}
|
|
107
|
-
}, {
|
|
108
|
-
key: "hasIncompleteEvent",
|
|
109
|
-
value: function hasIncompleteEvent() {
|
|
110
|
-
return this.currentEvent.data !== void 0;
|
|
111
|
-
}
|
|
112
|
-
}]);
|
|
113
|
-
}();
|
|
114
|
-
|
|
115
|
-
export { SSEParser };
|
|
116
|
-
//# sourceMappingURL=sse-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sse-parser.js","sources":["../../../../../pro-components/chat/chatbot/core/server/sse-parser.ts"],"sourcesContent":["import { LoggerManager } from '../utils/logger';\n\n/**\n * SSE 事件接口\n */\nexport interface SSEEvent {\n event?: string;\n data?: any;\n id?: string;\n}\n\n/**\n * SSE 事件流解析器\n */\nexport class SSEParser {\n private eventBuffer = '';\n\n private currentEvent: { event?: string; data?: string; id?: string } = {};\n\n private logger = LoggerManager.getLogger();\n\n // 事件回调函数\n onMessage?: (msg: SSEEvent) => void;\n\n /**\n * 解析SSE数据块\n */\n parse(chunk: string): void {\n this.eventBuffer += chunk;\n\n // 循环处理,直到缓冲区中再也找不到完整的行\n let newlineIndex;\n // eslint-disable-next-line no-cond-assign\n while ((newlineIndex = this.eventBuffer.indexOf('\\n')) !== -1) {\n // 提取一行(包含 \\r 如果有的话)\n const line = this.eventBuffer.slice(0, newlineIndex).replace(/\\r$/, '');\n\n // 从缓冲区移除已处理的行和换行符\n this.eventBuffer = this.eventBuffer.slice(newlineIndex + 1);\n\n // 处理这一行\n this.processSSELine(line);\n }\n }\n\n /**\n * 处理SSE行数据\n */\n private processSSELine(line: string): void {\n if (line === '') {\n // 空行表示事件结束\n this.emitCurrentEvent();\n return;\n }\n\n const colonIndex = line.indexOf(':');\n if (colonIndex === 0) {\n // 注释行,忽略\n return;\n }\n\n let field: string;\n let value: string;\n\n if (colonIndex === -1) {\n field = line.trim();\n value = '';\n } else {\n field = line.slice(0, colonIndex).trim();\n value = line.slice(colonIndex + 1).replace(/^ /, ''); // 移除开头空格\n }\n\n // 处理SSE字段\n switch (field) {\n case 'event':\n this.currentEvent.event = value;\n break;\n case 'data':\n if (this.currentEvent.data === undefined) {\n this.currentEvent.data = value;\n } else {\n this.currentEvent.data += `\\n${value}`;\n }\n break;\n case 'id':\n this.currentEvent.id = value;\n break;\n default:\n // 忽略其他字段\n break;\n }\n }\n\n /**\n * 发送当前事件\n */\n private emitCurrentEvent(): void {\n if (this.currentEvent.data !== undefined && this.onMessage) {\n try {\n // 尝试解析JSON,失败则保持原始字符串\n let data: any;\n try {\n data = JSON.parse(this.currentEvent.data);\n } catch {\n data = this.currentEvent.data;\n }\n\n this.onMessage({\n event: this.currentEvent.event || '',\n data,\n });\n } catch (error) {\n this.logger.error('Error emitting event:', error);\n }\n }\n\n // 清理当前事件\n this.currentEvent = {};\n }\n\n /**\n * 重置解析器状态\n */\n reset(): void {\n this.eventBuffer = '';\n this.currentEvent = {};\n }\n\n /**\n * 获取当前缓冲区大小\n */\n getBufferSize(): number {\n return this.eventBuffer.length;\n }\n\n /**\n * 获取当前事件状态\n */\n getCurrentEvent(): { event?: string; data?: string; id?: string } {\n return { ...this.currentEvent };\n }\n\n /**\n * 检查是否有未完成的事件\n */\n hasIncompleteEvent(): boolean {\n return this.currentEvent.data !== undefined;\n }\n}\n"],"names":["SSEParser","_classCallCheck","_defineProperty","LoggerManager","getLogger","_createClass","key","value","parse","chunk","eventBuffer","newlineIndex","indexOf","line","slice","replace","processSSELine","emitCurrentEvent","colonIndex","field","trim","currentEvent","event","data","concat","id","onMessage","JSON","_unused","error","logger","reset","getBufferSize","length","getCurrentEvent","_objectSpread","hasIncompleteEvent"],"mappings":"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"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enhanced server types for SSE client and LLM service
|
|
3
|
-
*/
|
|
4
|
-
import { ChatRequestParams } from '../type';
|
|
5
|
-
export declare enum SSEConnectionState {
|
|
6
|
-
DISCONNECTED = "disconnected",
|
|
7
|
-
CONNECTING = "connecting",
|
|
8
|
-
CONNECTED = "connected",
|
|
9
|
-
RECONNECTING = "reconnecting",
|
|
10
|
-
CLOSING = "closing",
|
|
11
|
-
CLOSED = "closed",
|
|
12
|
-
ERROR = "error"
|
|
13
|
-
}
|
|
14
|
-
export interface SSEClientConfig extends Omit<RequestInit & ChatRequestParams, 'signal'> {
|
|
15
|
-
timeout?: number;
|
|
16
|
-
}
|
|
17
|
-
export interface SSEEvent {
|
|
18
|
-
event?: string;
|
|
19
|
-
data?: any;
|
|
20
|
-
id?: string;
|
|
21
|
-
retry?: number;
|
|
22
|
-
timestamp?: number;
|
|
23
|
-
}
|
|
24
|
-
export interface ConnectionInfo {
|
|
25
|
-
id: string;
|
|
26
|
-
retryCount: number;
|
|
27
|
-
lastActivity: number;
|
|
28
|
-
state?: SSEConnectionState;
|
|
29
|
-
url?: string;
|
|
30
|
-
createdAt?: number;
|
|
31
|
-
error?: Error;
|
|
32
|
-
stats: ConnectionStats;
|
|
33
|
-
}
|
|
34
|
-
export interface ConnectionStatus {
|
|
35
|
-
id: string;
|
|
36
|
-
state: SSEConnectionState;
|
|
37
|
-
error?: Error;
|
|
38
|
-
lastActivity?: number;
|
|
39
|
-
}
|
|
40
|
-
export interface ConnectionStats {
|
|
41
|
-
lastError?: Error;
|
|
42
|
-
connectionTime?: number;
|
|
43
|
-
}
|
|
44
|
-
export interface StateChangeEvent {
|
|
45
|
-
connectionId: string;
|
|
46
|
-
from: SSEConnectionState;
|
|
47
|
-
to: SSEConnectionState;
|
|
48
|
-
timestamp: number;
|
|
49
|
-
}
|
|
50
|
-
export interface HeartbeatEvent {
|
|
51
|
-
connectionId: string;
|
|
52
|
-
timestamp: number;
|
|
53
|
-
}
|
|
54
|
-
export declare const DEFAULT_SSE_CONFIG: SSEClientConfig;
|