@ai-group/chat-sdk 0.2.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.
- package/README.md +239 -0
- package/dist/esm/assets/arrow-down.png +0 -0
- package/dist/esm/assets/arrow-up.png +0 -0
- package/dist/esm/assets/chatKnowledge.png +0 -0
- package/dist/esm/assets/completed-black.png +0 -0
- package/dist/esm/assets/completed.png +0 -0
- package/dist/esm/assets/document-black.png +0 -0
- package/dist/esm/assets/document.png +0 -0
- package/dist/esm/assets/document.svg +16 -0
- package/dist/esm/assets/empty.png +0 -0
- package/dist/esm/assets/group.png +0 -0
- package/dist/esm/assets/qa-black.png +0 -0
- package/dist/esm/assets/qa.png +0 -0
- package/dist/esm/assets/skillNo-black.png +0 -0
- package/dist/esm/assets/skillNo.png +0 -0
- package/dist/esm/assets/tools-black.png +0 -0
- package/dist/esm/assets/tools.png +0 -0
- package/dist/esm/client/base.js +2 -0
- package/dist/esm/client/base.js.map +1 -0
- package/dist/esm/client/restClient.js +2 -0
- package/dist/esm/client/restClient.js.map +1 -0
- package/dist/esm/client/wsClient.js +2 -0
- package/dist/esm/client/wsClient.js.map +1 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +562 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -0
- package/dist/esm/components/XAiChatbot/index.js +586 -0
- package/dist/esm/components/XAiChatbot/index.js.map +1 -0
- package/dist/esm/components/XAiChatbot/styles.js +62 -0
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +297 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -0
- package/dist/esm/components/XAiProvider/index.js +128 -0
- package/dist/esm/components/XAiProvider/index.js.map +1 -0
- package/dist/esm/components/XAiSDK.js +29 -0
- package/dist/esm/components/XAiSDK.js.map +1 -0
- package/dist/esm/components/XAiWebSDKWrapper.js +42 -0
- package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -0
- package/dist/esm/context/AiProviderContext.js +62 -0
- package/dist/esm/context/AiProviderContext.js.map +1 -0
- package/dist/esm/context/ThemeContext.js +8 -0
- package/dist/esm/context/ThemeContext.js.map +1 -0
- package/dist/esm/hooks/useAgentGenerator.js +536 -0
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -0
- package/dist/esm/hooks/useEventStreamRequest.js +229 -0
- package/dist/esm/hooks/useEventStreamRequest.js.map +1 -0
- package/dist/esm/hooks/useProviderContext.js +115 -0
- package/dist/esm/hooks/useProviderContext.js.map +1 -0
- package/dist/esm/hooks/useXAiSDK.js +49 -0
- package/dist/esm/hooks/useXAiSDK.js.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/services/api.js +73 -0
- package/dist/esm/services/api.js.map +1 -0
- package/dist/esm/styles/common.js +106 -0
- package/dist/esm/styles/common.js.map +1 -0
- package/dist/esm/styles/markdown.js +12 -0
- package/dist/esm/styles/markdown.js.map +1 -0
- package/dist/esm/types/XAiChatbot.js +2 -0
- package/dist/esm/types/XAiChatbot.js.map +1 -0
- package/dist/esm/types/XAiMessage.js +65 -0
- package/dist/esm/types/XAiMessage.js.map +1 -0
- package/dist/esm/types/XAiProvider.js +4 -0
- package/dist/esm/types/XAiProvider.js.map +1 -0
- package/dist/esm/types/index.js +4 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/mdx.d.ts +18 -0
- package/dist/esm/utils/chat.js +976 -0
- package/dist/esm/utils/chat.js.map +1 -0
- package/dist/esm/utils/index.js +19 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/providerManager.js +70 -0
- package/dist/esm/utils/providerManager.js.map +1 -0
- package/dist/esm/utils/request.example.js +379 -0
- package/dist/esm/utils/request.example.js.map +1 -0
- package/dist/esm/utils/request.js +491 -0
- package/dist/esm/utils/request.js.map +1 -0
- package/dist/esm/utils/umdEntry.js +109 -0
- package/dist/esm/utils/umdEntry.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
5
|
+
import { useState, useEffect, useRef } from 'react';
|
|
6
|
+
import { fetchEventSource, EventStreamContentType } from '@microsoft/fetch-event-source';
|
|
7
|
+
import { message } from 'antd';
|
|
8
|
+
import { MessageRole } from "../types/XAiMessage";
|
|
9
|
+
import { safeJsonParse } from "../utils";
|
|
10
|
+
import { request } from "../utils/request";
|
|
11
|
+
export var useEventStreamRequest = function useEventStreamRequest(_ref) {
|
|
12
|
+
var _ref$onOpen = _ref.onOpen,
|
|
13
|
+
onOpen = _ref$onOpen === void 0 ? function () {} : _ref$onOpen,
|
|
14
|
+
_ref$onError = _ref.onError,
|
|
15
|
+
onError = _ref$onError === void 0 ? function () {} : _ref$onError,
|
|
16
|
+
_ref$streaming = _ref.streaming,
|
|
17
|
+
streaming = _ref$streaming === void 0 ? true : _ref$streaming,
|
|
18
|
+
_ref$onClose = _ref.onClose,
|
|
19
|
+
onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,
|
|
20
|
+
_ref$textSpeed = _ref.textSpeed,
|
|
21
|
+
textSpeed = _ref$textSpeed === void 0 ? 60 : _ref$textSpeed;
|
|
22
|
+
// 使用 useRef 作为临时缓存区,降低 setState 频率
|
|
23
|
+
var contentCacheRef = useRef([]); // 存放当前完整文本
|
|
24
|
+
var streamStatusRef = useRef(0); // 流式接收状态 0: 未开始 1: 进行中 2: 结束
|
|
25
|
+
var _useState = useState(false),
|
|
26
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
27
|
+
loading = _useState2[0],
|
|
28
|
+
setLoading = _useState2[1];
|
|
29
|
+
var loadingRef = useRef(loading);
|
|
30
|
+
var _useState3 = useState({
|
|
31
|
+
content: ''
|
|
32
|
+
}),
|
|
33
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
34
|
+
responseData = _useState4[0],
|
|
35
|
+
setResponseData = _useState4[1];
|
|
36
|
+
var controllerRef = useRef(null);
|
|
37
|
+
|
|
38
|
+
// 停止接收请求
|
|
39
|
+
var stop = function stop() {
|
|
40
|
+
var _controllerRef$curren;
|
|
41
|
+
(_controllerRef$curren = controllerRef.current) === null || _controllerRef$curren === void 0 || _controllerRef$curren.abort();
|
|
42
|
+
contentCacheRef.current = []; // 立即清空缓存区
|
|
43
|
+
setLoading(false);
|
|
44
|
+
};
|
|
45
|
+
var start = /*#__PURE__*/function () {
|
|
46
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url, values) {
|
|
47
|
+
var headers,
|
|
48
|
+
prefixUrl,
|
|
49
|
+
params,
|
|
50
|
+
signal,
|
|
51
|
+
_response,
|
|
52
|
+
_args2 = arguments;
|
|
53
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
54
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
55
|
+
case 0:
|
|
56
|
+
headers = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};
|
|
57
|
+
prefixUrl = url; // todo 需要修改
|
|
58
|
+
setResponseData({});
|
|
59
|
+
setLoading(true);
|
|
60
|
+
controllerRef.current = new AbortController();
|
|
61
|
+
params = _objectSpread({}, values);
|
|
62
|
+
signal = controllerRef.current.signal;
|
|
63
|
+
if (!streaming) {
|
|
64
|
+
_context2.next = 11;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
fetchEventSource(prefixUrl, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
openWhenHidden: true,
|
|
70
|
+
headers: _objectSpread({
|
|
71
|
+
'Content-Type': 'application/json',
|
|
72
|
+
'Cache-Control': 'no-cache',
|
|
73
|
+
stream: 'true'
|
|
74
|
+
}, headers),
|
|
75
|
+
signal: signal,
|
|
76
|
+
body: JSON.stringify(params),
|
|
77
|
+
onopen: function onopen(response) {
|
|
78
|
+
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
79
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
80
|
+
while (1) switch (_context.prev = _context.next) {
|
|
81
|
+
case 0:
|
|
82
|
+
streamStatusRef.current = 1;
|
|
83
|
+
if (!(response.ok && response.headers.get('content-type') === EventStreamContentType)) {
|
|
84
|
+
_context.next = 5;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
onOpen === null || onOpen === void 0 || onOpen(response);
|
|
88
|
+
_context.next = 11;
|
|
89
|
+
break;
|
|
90
|
+
case 5:
|
|
91
|
+
if (!(response.status === 401)) {
|
|
92
|
+
_context.next = 8;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
message.error('用户未登录,即将前往登录……');
|
|
96
|
+
// todo 需要修改
|
|
97
|
+
return _context.abrupt("return");
|
|
98
|
+
case 8:
|
|
99
|
+
if (response.status === 500) {
|
|
100
|
+
message.error('服务器错误,请稍后重试。'); // 使用Antd的message组件给出提示
|
|
101
|
+
} else if (response.status > 500) {
|
|
102
|
+
message.error('网络不给力,请稍后重试。');
|
|
103
|
+
}
|
|
104
|
+
if (response.status >= 500) {
|
|
105
|
+
setResponseData(function (prevResponseData) {
|
|
106
|
+
return _objectSpread(_objectSpread({}, prevResponseData), {}, {
|
|
107
|
+
content: '网络不给力,请稍后重试~~~~~',
|
|
108
|
+
requestId: '',
|
|
109
|
+
role: MessageRole.assistant,
|
|
110
|
+
httpCode: response.status,
|
|
111
|
+
error: true,
|
|
112
|
+
code: ''
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
onError === null || onError === void 0 || onError(new Error("Unexpected response status: ".concat(response.status)));
|
|
117
|
+
case 11:
|
|
118
|
+
case "end":
|
|
119
|
+
return _context.stop();
|
|
120
|
+
}
|
|
121
|
+
}, _callee);
|
|
122
|
+
}))();
|
|
123
|
+
},
|
|
124
|
+
onmessage: function onmessage(event) {
|
|
125
|
+
var _contentCacheRef$curr;
|
|
126
|
+
// 解析事件数据
|
|
127
|
+
var eventData = safeJsonParse(event.data, {});
|
|
128
|
+
// 如果请求失败,则停止请求
|
|
129
|
+
if (eventData.success !== true) {
|
|
130
|
+
setResponseData(_objectSpread(_objectSpread({}, eventData), {}, {
|
|
131
|
+
code: eventData.code,
|
|
132
|
+
content: eventData.message || '网络不给力,请稍后重试~~',
|
|
133
|
+
requestId: eventData.requestId,
|
|
134
|
+
role: MessageRole.assistant,
|
|
135
|
+
httpCode: 200,
|
|
136
|
+
error: true
|
|
137
|
+
}));
|
|
138
|
+
stop();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// 推送内容到缓存区,后续通过Interval定时器,将缓存区内容设置到响应数据中
|
|
142
|
+
(_contentCacheRef$curr = contentCacheRef.current) === null || _contentCacheRef$curr === void 0 || _contentCacheRef$curr.push(eventData);
|
|
143
|
+
},
|
|
144
|
+
onerror: function onerror(error) {
|
|
145
|
+
streamStatusRef.current = 2;
|
|
146
|
+
setLoading(false);
|
|
147
|
+
onError === null || onError === void 0 || onError(error);
|
|
148
|
+
},
|
|
149
|
+
onclose: function onclose() {
|
|
150
|
+
streamStatusRef.current = 2;
|
|
151
|
+
onClose();
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
_context2.next = 23;
|
|
155
|
+
break;
|
|
156
|
+
case 11:
|
|
157
|
+
_context2.prev = 11;
|
|
158
|
+
_context2.next = 14;
|
|
159
|
+
return request.post(url, params);
|
|
160
|
+
case 14:
|
|
161
|
+
_response = _context2.sent;
|
|
162
|
+
setResponseData(_response);
|
|
163
|
+
setLoading(false);
|
|
164
|
+
_context2.next = 23;
|
|
165
|
+
break;
|
|
166
|
+
case 19:
|
|
167
|
+
_context2.prev = 19;
|
|
168
|
+
_context2.t0 = _context2["catch"](11);
|
|
169
|
+
onError === null || onError === void 0 || onError(_context2.t0);
|
|
170
|
+
setLoading(false);
|
|
171
|
+
case 23:
|
|
172
|
+
case "end":
|
|
173
|
+
return _context2.stop();
|
|
174
|
+
}
|
|
175
|
+
}, _callee2, null, [[11, 19]]);
|
|
176
|
+
}));
|
|
177
|
+
return function start(_x, _x2) {
|
|
178
|
+
return _ref2.apply(this, arguments);
|
|
179
|
+
};
|
|
180
|
+
}();
|
|
181
|
+
useEffect(function () {
|
|
182
|
+
loadingRef.current = loading;
|
|
183
|
+
}, [loading]);
|
|
184
|
+
|
|
185
|
+
// 初始化定时器 将缓存区有新内容时设置到响应数据中
|
|
186
|
+
useEffect(function () {
|
|
187
|
+
var timer = setInterval(function () {
|
|
188
|
+
var _contentCacheRef$curr2;
|
|
189
|
+
if (((_contentCacheRef$curr2 = contentCacheRef.current) === null || _contentCacheRef$curr2 === void 0 ? void 0 : _contentCacheRef$curr2.length) > 0) {
|
|
190
|
+
var _contentCacheRef$curr3;
|
|
191
|
+
// 如果缓存区有新内容,则设置到响应数据中
|
|
192
|
+
var eventData = (_contentCacheRef$curr3 = contentCacheRef.current) === null || _contentCacheRef$curr3 === void 0 ? void 0 : _contentCacheRef$curr3.shift();
|
|
193
|
+
var newData = eventData === null || eventData === void 0 ? void 0 : eventData.data;
|
|
194
|
+
setResponseData(function (prevResponseData) {
|
|
195
|
+
var _prevResponseData$con;
|
|
196
|
+
var prevContent = (_prevResponseData$con = prevResponseData.content) !== null && _prevResponseData$con !== void 0 ? _prevResponseData$con : '';
|
|
197
|
+
return _objectSpread(_objectSpread({}, eventData), {}, {
|
|
198
|
+
code: eventData === null || eventData === void 0 ? void 0 : eventData.code,
|
|
199
|
+
content: "".concat(prevContent).concat(newData),
|
|
200
|
+
requestId: eventData === null || eventData === void 0 ? void 0 : eventData.requestId,
|
|
201
|
+
role: MessageRole.assistant
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
} else if (streamStatusRef.current === 2 && loadingRef.current) {
|
|
205
|
+
streamStatusRef.current = 0;
|
|
206
|
+
setLoading(false);
|
|
207
|
+
}
|
|
208
|
+
}, textSpeed); // 渲染间隔
|
|
209
|
+
|
|
210
|
+
return function () {
|
|
211
|
+
return clearInterval(timer);
|
|
212
|
+
};
|
|
213
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
214
|
+
}, []);
|
|
215
|
+
useEffect(function () {
|
|
216
|
+
return function () {
|
|
217
|
+
stop();
|
|
218
|
+
};
|
|
219
|
+
}, []);
|
|
220
|
+
return {
|
|
221
|
+
responseData: responseData,
|
|
222
|
+
loading: loading,
|
|
223
|
+
start: start,
|
|
224
|
+
stop: stop,
|
|
225
|
+
onError: onError
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
export default useEventStreamRequest;
|
|
229
|
+
//# sourceMappingURL=useEventStreamRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useEffect","useRef","fetchEventSource","EventStreamContentType","message","MessageRole","safeJsonParse","request","useEventStreamRequest","_ref","_ref$onOpen","onOpen","_ref$onError","onError","_ref$streaming","streaming","_ref$onClose","onClose","_ref$textSpeed","textSpeed","contentCacheRef","streamStatusRef","_useState","_useState2","_slicedToArray","loading","setLoading","loadingRef","_useState3","content","_useState4","responseData","setResponseData","controllerRef","stop","_controllerRef$curren","current","abort","start","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","url","values","headers","prefixUrl","params","signal","_response","_args2","arguments","wrap","_callee2$","_context2","prev","next","length","undefined","AbortController","_objectSpread","method","openWhenHidden","stream","body","JSON","stringify","onopen","response","_callee","_callee$","_context","ok","get","status","error","abrupt","prevResponseData","requestId","role","assistant","httpCode","code","Error","concat","onmessage","event","_contentCacheRef$curr","eventData","data","success","push","onerror","onclose","post","sent","t0","_x","_x2","apply","timer","setInterval","_contentCacheRef$curr2","_contentCacheRef$curr3","shift","newData","_prevResponseData$con","prevContent","clearInterval"],"sources":["../../../src/hooks/useEventStreamRequest.ts"],"sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport { fetchEventSource, EventStreamContentType } from '@microsoft/fetch-event-source';\nimport { message } from 'antd';\nimport { MessageRole } from '@/types/XAiMessage';\nimport { safeJsonParse } from '@/utils/index';\nimport { request } from '@/utils/request';\n\ninterface IResponseData {\n code: string;\n httpCode?: number;\n data: string | { message: string };\n message: string;\n content: string;\n requestId: string;\n sessionId: string;\n error?: boolean;\n success?: boolean;\n}\ninterface UseEventStreamProps {\n streaming: boolean;\n options?: RequestInit;\n onOpen?: (response: Response) => void;\n onError?: (error: Error) => void;\n onClose?: () => void;\n textSpeed?: number;\n}\n\ninterface UseEventStreamReturn {\n responseData: IResponseData | Record<any, any>;\n loading: boolean;\n start: (url: string, values?: any, headers?: Record<string, string>) => void;\n stop: () => void;\n onError?: (error: Error) => void;\n}\n\nexport const useEventStreamRequest = ({\n onOpen = () => {},\n onError = () => {},\n streaming = true,\n onClose = () => {},\n textSpeed = 60,\n}: UseEventStreamProps): UseEventStreamReturn => {\n // 使用 useRef 作为临时缓存区,降低 setState 频率\n const contentCacheRef = useRef<IResponseData[]>([]); // 存放当前完整文本\n const streamStatusRef = useRef<number>(0); // 流式接收状态 0: 未开始 1: 进行中 2: 结束\n const [loading, setLoading] = useState<boolean>(false);\n const loadingRef = useRef(loading);\n const [responseData, setResponseData] = useState<IResponseData | Record<any, any>>({ content: '' });\n const controllerRef = useRef<AbortController | null>(null);\n\n // 停止接收请求\n const stop = () => {\n controllerRef.current?.abort();\n contentCacheRef.current = []; // 立即清空缓存区\n setLoading(false);\n };\n\n const start = async (url: string, values?: any, headers = {}) => {\n const prefixUrl = url; // todo 需要修改\n setResponseData({});\n setLoading(true);\n controllerRef.current = new AbortController();\n const params = {\n ...values,\n };\n\n const { signal } = controllerRef.current;\n\n if (streaming) {\n fetchEventSource(prefixUrl, {\n method: 'POST',\n openWhenHidden: true,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n stream: 'true',\n ...headers,\n },\n signal,\n body: JSON.stringify(params),\n async onopen(response) {\n streamStatusRef.current = 1;\n if (response.ok && response.headers.get('content-type') === EventStreamContentType) {\n onOpen?.(response);\n } else {\n if (response.status === 401) {\n message.error('用户未登录,即将前往登录……');\n // todo 需要修改\n return;\n } if (response.status === 500) {\n message.error('服务器错误,请稍后重试。'); // 使用Antd的message组件给出提示\n } else if (response.status > 500) {\n message.error('网络不给力,请稍后重试。');\n }\n if (response.status >= 500) {\n setResponseData((prevResponseData: IResponseData) => {\n return {\n ...prevResponseData,\n content: '网络不给力,请稍后重试~~~~~',\n requestId: '',\n role: MessageRole.assistant,\n httpCode: response.status,\n error: true,\n code: '',\n };\n });\n }\n onError?.(new Error(`Unexpected response status: ${response.status}`));\n }\n },\n onmessage: (event: { data: string }) => {\n // 解析事件数据\n const eventData = safeJsonParse(event.data, {});\n // 如果请求失败,则停止请求\n if (eventData.success !== true) {\n setResponseData({\n ...eventData,\n code: eventData.code,\n content: eventData.message || '网络不给力,请稍后重试~~',\n requestId: eventData.requestId,\n role: MessageRole.assistant,\n httpCode: 200,\n error: true,\n });\n stop();\n return;\n }\n // 推送内容到缓存区,后续通过Interval定时器,将缓存区内容设置到响应数据中\n contentCacheRef.current?.push(eventData);\n },\n onerror: (error: Error) => {\n streamStatusRef.current = 2;\n setLoading(false);\n onError?.(error);\n },\n onclose: () => {\n streamStatusRef.current = 2;\n onClose();\n },\n });\n } else {\n try {\n const response = await request.post(url, params);\n setResponseData(response);\n setLoading(false);\n } catch (error: any) {\n onError?.(error);\n setLoading(false);\n }\n }\n };\n\n useEffect(() => {\n loadingRef.current = loading;\n }, [loading]);\n\n // 初始化定时器 将缓存区有新内容时设置到响应数据中\n useEffect(() => {\n const timer = setInterval(() => {\n if (contentCacheRef.current?.length > 0) {\n // 如果缓存区有新内容,则设置到响应数据中\n const eventData = contentCacheRef.current?.shift();\n const newData = eventData?.data;\n setResponseData((prevResponseData: IResponseData) => {\n const prevContent = prevResponseData.content ?? '';\n return {\n ...eventData,\n code: eventData?.code,\n content: `${prevContent}${newData}`,\n requestId: eventData?.requestId,\n role: MessageRole.assistant,\n };\n });\n } else if (streamStatusRef.current === 2 && loadingRef.current) {\n streamStatusRef.current = 0;\n setLoading(false);\n }\n }, textSpeed); // 渲染间隔\n\n return () => clearInterval(timer);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return () => {\n stop();\n };\n }, []);\n\n return {\n responseData,\n loading,\n start,\n stop,\n onError,\n };\n};\n\nexport default useEventStreamRequest;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
4
|
+
var _excluded = ["messages", "loading"];
|
|
5
|
+
import { useXAi } from "../context/AiProviderContext";
|
|
6
|
+
|
|
7
|
+
// 定义方法调用器的类型
|
|
8
|
+
|
|
9
|
+
// 定义 Provider 方法的类型
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 通用的 Provider 上下文 Hook
|
|
13
|
+
* 用于判断组件是否在 XAiProvider 中,并合并相关属性
|
|
14
|
+
*/
|
|
15
|
+
export var useProviderContext = function useProviderContext(options) {
|
|
16
|
+
var props = options.props,
|
|
17
|
+
providerProps = options.providerProps,
|
|
18
|
+
mergeLogic = options.mergeLogic;
|
|
19
|
+
|
|
20
|
+
// 获取 Provider 上下文
|
|
21
|
+
var context = useXAi();
|
|
22
|
+
|
|
23
|
+
// 判断是否在 Provider 中
|
|
24
|
+
var isInProvider = !!(context !== null && context !== void 0 && context.isInProvider);
|
|
25
|
+
|
|
26
|
+
// 合并 props 和 context
|
|
27
|
+
var mergedProps;
|
|
28
|
+
if (mergeLogic) {
|
|
29
|
+
mergedProps = mergeLogic(props, context);
|
|
30
|
+
} else if (context && isInProvider) {
|
|
31
|
+
mergedProps = _objectSpread(_objectSpread({}, props), context);
|
|
32
|
+
} else {
|
|
33
|
+
mergedProps = props;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 获取 Provider 中的特定值
|
|
37
|
+
var getProviderValue = function getProviderValue(key) {
|
|
38
|
+
return context === null || context === void 0 ? void 0 : context[key];
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
mergedProps: mergedProps,
|
|
42
|
+
isInProvider: isInProvider,
|
|
43
|
+
context: context,
|
|
44
|
+
getProviderValue: getProviderValue
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 专门为 XAiChatbot 设计的 Hook
|
|
50
|
+
*/
|
|
51
|
+
export var useChatbotContext = function useChatbotContext(componentProps) {
|
|
52
|
+
return useProviderContext({
|
|
53
|
+
props: componentProps,
|
|
54
|
+
mergeLogic: function mergeLogic(props, context) {
|
|
55
|
+
if (!(context !== null && context !== void 0 && context.isInProvider)) {
|
|
56
|
+
return props;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 智能合并逻辑 - 合并所有 Provider 提供的属性
|
|
60
|
+
var contextMessages = context.messages,
|
|
61
|
+
contextLoading = context.loading,
|
|
62
|
+
restContext = _objectWithoutProperties(context, _excluded);
|
|
63
|
+
return _objectSpread(_objectSpread(_objectSpread({}, props), restContext), {}, {
|
|
64
|
+
// 优先使用 Provider 的状态,如果没有则使用 props
|
|
65
|
+
messages: contextMessages || props.messages || [],
|
|
66
|
+
loading: contextLoading || props.loading || false,
|
|
67
|
+
// 确保 onSend 等回调函数也被合并
|
|
68
|
+
onSend: context.onSend || props.onSend,
|
|
69
|
+
onClear: context.onClear || props.onClear,
|
|
70
|
+
onStop: context.onStop || props.onStop,
|
|
71
|
+
onSuggestMessageClick: context.onSuggestMessageClick || props.onSuggestMessageClick,
|
|
72
|
+
onMessagesActionsCallback: context.onMessagesActionsCallback || props.onMessagesActionsCallback
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* 通用的 Provider 方法调用 Hook
|
|
80
|
+
*/
|
|
81
|
+
export var useProviderMethods = function useProviderMethods() {
|
|
82
|
+
var context = useXAi();
|
|
83
|
+
var callMethod = function callMethod(methodName) {
|
|
84
|
+
if (context !== null && context !== void 0 && context.isInProvider && typeof context[methodName] === 'function') {
|
|
85
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
86
|
+
args[_key - 1] = arguments[_key];
|
|
87
|
+
}
|
|
88
|
+
return context[methodName].apply(context, args);
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// 创建统一的方法调用器,支持参数转换
|
|
94
|
+
var createMethodCaller = function createMethodCaller(providerMethod, argsTransformer) {
|
|
95
|
+
return function () {
|
|
96
|
+
// 如果 Provider 方法存在,直接调用并返回
|
|
97
|
+
if (context !== null && context !== void 0 && context.isInProvider && typeof context[providerMethod] === 'function') {
|
|
98
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
99
|
+
args[_key2] = arguments[_key2];
|
|
100
|
+
}
|
|
101
|
+
var transformedArgs = argsTransformer ? argsTransformer(args) : args;
|
|
102
|
+
return context[providerMethod].apply(context, _toConsumableArray(transformedArgs));
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
isInProvider: !!(context !== null && context !== void 0 && context.isInProvider),
|
|
109
|
+
sendMessage: createMethodCaller('onSend'),
|
|
110
|
+
stopGeneration: createMethodCaller('onStop'),
|
|
111
|
+
clearMessages: createMethodCaller('onClear'),
|
|
112
|
+
regenerateLastMessage: createMethodCaller('onSend')
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=useProviderContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useXAi","useProviderContext","options","props","providerProps","mergeLogic","context","isInProvider","mergedProps","_objectSpread","getProviderValue","key","useChatbotContext","componentProps","contextMessages","messages","contextLoading","loading","restContext","_objectWithoutProperties","_excluded","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","useProviderMethods","callMethod","methodName","_len","arguments","length","args","Array","_key","apply","undefined","createMethodCaller","providerMethod","argsTransformer","_len2","_key2","transformedArgs","_toConsumableArray","sendMessage","stopGeneration","clearMessages","regenerateLastMessage"],"sources":["../../../src/hooks/useProviderContext.ts"],"sourcesContent":["import { useXAi } from '@/context/AiProviderContext';\nimport type { XAiContextType } from '@/context/AiProviderContext';\n\nexport interface UseProviderContextOptions<T> {\n // 组件自身的 props\n props: T;\n // 需要从 Provider 中获取的属性\n providerProps?: (keyof XAiContextType)[];\n // 自定义合并逻辑\n mergeLogic?: (props: T, context: XAiContextType | undefined) => T;\n}\n\nexport interface UseProviderContextReturn<T> {\n // 合并后的 props\n mergedProps: T;\n // 是否在 Provider 中\n isInProvider: boolean;\n // Provider 上下文\n context: XAiContextType | undefined;\n // 从 Provider 中获取特定属性\n getProviderValue: <K extends keyof XAiContextType>(key: K) => XAiContextType[K] | undefined;\n}\n\n// 定义方法调用器的类型\nexport type MethodCaller<T extends any[] = any[], R = any> = (...args: T) => R;\n\n// 定义 Provider 方法的类型\nexport interface ProviderMethods {\n isInProvider: boolean;\n sendMessage: MethodCaller<[string], void>;\n stopGeneration: MethodCaller<[], void>;\n clearMessages: MethodCaller<[], void>;\n regenerateLastMessage: MethodCaller<[string], void>;\n}\n\n/**\n * 通用的 Provider 上下文 Hook\n * 用于判断组件是否在 XAiProvider 中,并合并相关属性\n */\nexport const useProviderContext = <T extends Record<string, any>>(\n options: UseProviderContextOptions<T>,\n): UseProviderContextReturn<T> => {\n const { props, providerProps, mergeLogic } = options;\n\n // 获取 Provider 上下文\n const context = useXAi();\n\n // 判断是否在 Provider 中\n const isInProvider = !!context?.isInProvider;\n\n // 合并 props 和 context\n let mergedProps: T;\n if (mergeLogic) {\n mergedProps = mergeLogic(props, context);\n } else if (context && isInProvider) {\n mergedProps = { ...props, ...context };\n } else {\n mergedProps = props;\n }\n\n // 获取 Provider 中的特定值\n const getProviderValue = <K extends keyof XAiContextType>(key: K): XAiContextType[K] | undefined => {\n return context?.[key];\n };\n\n return {\n mergedProps,\n isInProvider,\n context,\n getProviderValue,\n };\n};\n\n/**\n * 专门为 XAiChatbot 设计的 Hook\n */\nexport const useChatbotContext = (componentProps: any) => {\n return useProviderContext({\n props: componentProps,\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n // 智能合并逻辑 - 合并所有 Provider 提供的属性\n const { messages: contextMessages, loading: contextLoading, ...restContext } = context;\n return {\n ...props,\n ...restContext,\n // 优先使用 Provider 的状态,如果没有则使用 props\n messages: contextMessages || props.messages || [],\n loading: contextLoading || props.loading || false,\n // 确保 onSend 等回调函数也被合并\n onSend: context.onSend || props.onSend,\n onClear: context.onClear || props.onClear,\n onStop: context.onStop || props.onStop,\n onSuggestMessageClick: context.onSuggestMessageClick || props.onSuggestMessageClick,\n onMessagesActionsCallback: context.onMessagesActionsCallback || props.onMessagesActionsCallback,\n };\n },\n });\n};\n\n/**\n * 通用的 Provider 方法调用 Hook\n */\nexport const useProviderMethods = (): ProviderMethods => {\n const context = useXAi();\n\n const callMethod = (methodName: keyof XAiContextType, ...args: any[]) => {\n if (context?.isInProvider && typeof context[methodName] === 'function') {\n return (context[methodName] as Function)(...args);\n }\n return undefined;\n };\n\n // 创建统一的方法调用器,支持参数转换\n const createMethodCaller = (\n providerMethod: string,\n argsTransformer?: (args: any[]) => any[],\n ): MethodCaller => {\n return (...args: any[]) => {\n // 如果 Provider 方法存在,直接调用并返回\n if (context?.isInProvider && typeof context[providerMethod as keyof XAiContextType] === 'function') {\n const transformedArgs = argsTransformer ? argsTransformer(args) : args;\n return (context[providerMethod as keyof XAiContextType] as Function)(...transformedArgs);\n }\n return undefined;\n };\n };\n\n return {\n isInProvider: !!context?.isInProvider,\n sendMessage: createMethodCaller('onSend'),\n stopGeneration: createMethodCaller('onStop'),\n clearMessages: createMethodCaller('onClear'),\n regenerateLastMessage: createMethodCaller('onSend'),\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["containerId", "width", "height", "className", "style"];
|
|
4
|
+
import React, { useEffect, useRef } from 'react';
|
|
5
|
+
import XAiProvider from "../components/XAiProvider";
|
|
6
|
+
import XAiChatbot from "../components/XAiChatbot";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export var useXAiSDK = function useXAiSDK(options) {
|
|
9
|
+
var containerRef = useRef(null);
|
|
10
|
+
var _options$containerId = options.containerId,
|
|
11
|
+
containerId = _options$containerId === void 0 ? 'xai-chatbot-container' : _options$containerId,
|
|
12
|
+
_options$width = options.width,
|
|
13
|
+
width = _options$width === void 0 ? '400px' : _options$width,
|
|
14
|
+
_options$height = options.height,
|
|
15
|
+
height = _options$height === void 0 ? '600px' : _options$height,
|
|
16
|
+
className = options.className,
|
|
17
|
+
style = options.style,
|
|
18
|
+
providerProps = _objectWithoutProperties(options, _excluded);
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
if (containerRef.current) {
|
|
21
|
+
// 确保容器存在
|
|
22
|
+
var container = containerRef.current;
|
|
23
|
+
if (!container.querySelector('.xai-chatbot-wrapper')) {
|
|
24
|
+
// 创建包装器
|
|
25
|
+
var wrapper = document.createElement('div');
|
|
26
|
+
wrapper.className = 'xai-chatbot-wrapper';
|
|
27
|
+
wrapper.style.width = typeof width === 'number' ? "".concat(width, "px") : width;
|
|
28
|
+
wrapper.style.height = typeof height === 'number' ? "".concat(height, "px") : height;
|
|
29
|
+
if (className) wrapper.className += " ".concat(className);
|
|
30
|
+
if (style) Object.assign(wrapper.style, style);
|
|
31
|
+
container.appendChild(wrapper);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}, [containerId, width, height, className, style]);
|
|
35
|
+
return {
|
|
36
|
+
containerRef: containerRef,
|
|
37
|
+
render: function render() {
|
|
38
|
+
return /*#__PURE__*/_jsx("div", {
|
|
39
|
+
ref: containerRef,
|
|
40
|
+
id: containerId,
|
|
41
|
+
children: /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({}, providerProps), {}, {
|
|
42
|
+
children: /*#__PURE__*/_jsx(XAiChatbot, {})
|
|
43
|
+
}))
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export default useXAiSDK;
|
|
49
|
+
//# sourceMappingURL=useXAiSDK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","XAiProvider","XAiChatbot","jsx","_jsx","useXAiSDK","options","containerRef","_options$containerId","containerId","_options$width","width","_options$height","height","className","style","providerProps","_objectWithoutProperties","_excluded","current","container","querySelector","wrapper","document","createElement","concat","Object","assign","appendChild","render","ref","id","children","_objectSpread"],"sources":["../../../src/hooks/useXAiSDK.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '@/components/XAiChatbot';\n\nexport interface UseXAiSDKOptions extends XAiProviderProps {\n containerId?: string;\n width?: string | number;\n height?: string | number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const useXAiSDK = (options: UseXAiSDKOptions) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const {\n containerId = 'xai-chatbot-container',\n width = '400px',\n height = '600px',\n className,\n style,\n ...providerProps\n } = options;\n\n useEffect(() => {\n if (containerRef.current) {\n // 确保容器存在\n const container = containerRef.current;\n if (!container.querySelector('.xai-chatbot-wrapper')) {\n // 创建包装器\n const wrapper = document.createElement('div');\n wrapper.className = 'xai-chatbot-wrapper';\n wrapper.style.width = typeof width === 'number' ? `${width}px` : width;\n wrapper.style.height = typeof height === 'number' ? `${height}px` : height;\n if (className) wrapper.className += ` ${className}`;\n if (style) Object.assign(wrapper.style, style);\n \n container.appendChild(wrapper);\n }\n }\n }, [containerId, width, height, className, style]);\n\n return {\n containerRef,\n render: () => (\n <div ref={containerRef} id={containerId}>\n <XAiProvider {...providerProps}>\n <XAiChatbot />\n </XAiProvider>\n </div>\n ),\n };\n};\n\nexport default useXAiSDK; "],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEhD,OAAOC,WAAW;AAClB,OAAOC,UAAU;AAAgC,SAAAC,GAAA,IAAAC,IAAA;AAUjD,OAAO,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAIC,OAAyB,EAAK;EACtD,IAAMC,YAAY,GAAGP,MAAM,CAAiB,IAAI,CAAC;EACjD,IAAAQ,oBAAA,GAOIF,OAAO,CANTG,WAAW;IAAXA,WAAW,GAAAD,oBAAA,cAAG,uBAAuB,GAAAA,oBAAA;IAAAE,cAAA,GAMnCJ,OAAO,CALTK,KAAK;IAALA,KAAK,GAAAD,cAAA,cAAG,OAAO,GAAAA,cAAA;IAAAE,eAAA,GAKbN,OAAO,CAJTO,MAAM;IAANA,MAAM,GAAAD,eAAA,cAAG,OAAO,GAAAA,eAAA;IAChBE,SAAS,GAGPR,OAAO,CAHTQ,SAAS;IACTC,KAAK,GAEHT,OAAO,CAFTS,KAAK;IACFC,aAAa,GAAAC,wBAAA,CACdX,OAAO,EAAAY,SAAA;EAEXnB,SAAS,CAAC,YAAM;IACd,IAAIQ,YAAY,CAACY,OAAO,EAAE;MACxB;MACA,IAAMC,SAAS,GAAGb,YAAY,CAACY,OAAO;MACtC,IAAI,CAACC,SAAS,CAACC,aAAa,CAAC,sBAAsB,CAAC,EAAE;QACpD;QACA,IAAMC,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC7CF,OAAO,CAACR,SAAS,GAAG,qBAAqB;QACzCQ,OAAO,CAACP,KAAK,CAACJ,KAAK,GAAG,OAAOA,KAAK,KAAK,QAAQ,MAAAc,MAAA,CAAMd,KAAK,UAAOA,KAAK;QACtEW,OAAO,CAACP,KAAK,CAACF,MAAM,GAAG,OAAOA,MAAM,KAAK,QAAQ,MAAAY,MAAA,CAAMZ,MAAM,UAAOA,MAAM;QAC1E,IAAIC,SAAS,EAAEQ,OAAO,CAACR,SAAS,QAAAW,MAAA,CAAQX,SAAS,CAAE;QACnD,IAAIC,KAAK,EAAEW,MAAM,CAACC,MAAM,CAACL,OAAO,CAACP,KAAK,EAAEA,KAAK,CAAC;QAE9CK,SAAS,CAACQ,WAAW,CAACN,OAAO,CAAC;MAChC;IACF;EACF,CAAC,EAAE,CAACb,WAAW,EAAEE,KAAK,EAAEE,MAAM,EAAEC,SAAS,EAAEC,KAAK,CAAC,CAAC;EAElD,OAAO;IACLR,YAAY,EAAZA,YAAY;IACZsB,MAAM,EAAE,SAAAA,OAAA;MAAA,oBACNzB,IAAA;QAAK0B,GAAG,EAAEvB,YAAa;QAACwB,EAAE,EAAEtB,WAAY;QAAAuB,QAAA,eACtC5B,IAAA,CAACH,WAAW,EAAAgC,aAAA,CAAAA,aAAA,KAAKjB,aAAa;UAAAgB,QAAA,eAC5B5B,IAAA,CAACF,UAAU,IAAE;QAAC,EACH;MAAC,CACX,CAAC;IAAA;EAEV,CAAC;AACH,CAAC;AAED,eAAeG,SAAS"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// index.ts
|
|
2
|
+
import { useXAi } from "./context/AiProviderContext";
|
|
3
|
+
import XAiProvider from "./components/XAiProvider";
|
|
4
|
+
import XAiChatbot from "./components/XAiChatbot";
|
|
5
|
+
import XAiSDK from "./components/XAiSDK"; // test
|
|
6
|
+
import XAiWebSDKWrapper from "./components/XAiWebSDKWrapper"; // test
|
|
7
|
+
import useXAiSDK from "./hooks/useXAiSDK";
|
|
8
|
+
import request from "./utils/request";
|
|
9
|
+
export * from "./types";
|
|
10
|
+
export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiWebSDKWrapper, useXAiSDK, request };
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useXAi","XAiProvider","XAiChatbot","XAiSDK","XAiWebSDKWrapper","useXAiSDK","request"],"sources":["../../src/index.ts"],"sourcesContent":["// index.ts\nimport { useXAi } from './context/AiProviderContext';\nimport XAiProvider from './components/XAiProvider';\nimport XAiChatbot from './components/XAiChatbot';\nimport XAiSDK from './components/XAiSDK'; // test\nimport XAiWebSDKWrapper from './components/XAiWebSDKWrapper'; // test\nimport useXAiSDK from './hooks/useXAiSDK';\nimport request from './utils/request';\n\nexport * from './types';\n\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiWebSDKWrapper,\n useXAiSDK,\n request,\n};\n"],"mappings":"AAAA;AACA,SAASA,MAAM;AACf,OAAOC,WAAW;AAClB,OAAOC,UAAU;AACjB,OAAOC,MAAM,4BAA4B,CAAC;AAC1C,OAAOC,gBAAgB,sCAAsC,CAAC;AAC9D,OAAOC,SAAS;AAChB,OAAOC,OAAO;AAEd;AAEA,SACEN,MAAM,EACNC,WAAW,EACXC,UAAU,EACVC,MAAM,EACNC,gBAAgB,EAChBC,SAAS,EACTC,OAAO"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import { request } from "../utils/request";
|
|
4
|
+
|
|
5
|
+
// 服务端API响应接口
|
|
6
|
+
|
|
7
|
+
// 标准API响应类型
|
|
8
|
+
|
|
9
|
+
// 聊天配置类型
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 获取聊天配置
|
|
13
|
+
* 使用request,会自动添加token
|
|
14
|
+
*/
|
|
15
|
+
export var fetchAppConfig = /*#__PURE__*/function () {
|
|
16
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
17
|
+
var url, appNo, pt, tc, response;
|
|
18
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
19
|
+
while (1) switch (_context.prev = _context.next) {
|
|
20
|
+
case 0:
|
|
21
|
+
url = _ref.url, appNo = _ref.appNo, pt = _ref.pt, tc = _ref.tc;
|
|
22
|
+
_context.next = 3;
|
|
23
|
+
return request.post("".concat(url, "/appouter/config/").concat(appNo, "/initApp"), {}, {
|
|
24
|
+
params: {
|
|
25
|
+
pt: pt,
|
|
26
|
+
tc: tc
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
case 3:
|
|
30
|
+
response = _context.sent;
|
|
31
|
+
return _context.abrupt("return", response.data);
|
|
32
|
+
case 5:
|
|
33
|
+
case "end":
|
|
34
|
+
return _context.stop();
|
|
35
|
+
}
|
|
36
|
+
}, _callee);
|
|
37
|
+
}));
|
|
38
|
+
return function fetchAppConfig(_x) {
|
|
39
|
+
return _ref2.apply(this, arguments);
|
|
40
|
+
};
|
|
41
|
+
}();
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 获取聊天配置
|
|
45
|
+
* 使用request,会自动添加token
|
|
46
|
+
*/
|
|
47
|
+
export var sendMessage = /*#__PURE__*/function () {
|
|
48
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref3) {
|
|
49
|
+
var url, appNo, pt, tc, msg, response;
|
|
50
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
51
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
52
|
+
case 0:
|
|
53
|
+
url = _ref3.url, appNo = _ref3.appNo, pt = _ref3.pt, tc = _ref3.tc, msg = _ref3.msg;
|
|
54
|
+
_context2.next = 3;
|
|
55
|
+
return request.post("".concat(url, "/appouter/").concat(appNo, "/sendMsg"), {
|
|
56
|
+
pt: pt,
|
|
57
|
+
tc: tc,
|
|
58
|
+
msg: msg
|
|
59
|
+
});
|
|
60
|
+
case 3:
|
|
61
|
+
response = _context2.sent;
|
|
62
|
+
return _context2.abrupt("return", response.data);
|
|
63
|
+
case 5:
|
|
64
|
+
case "end":
|
|
65
|
+
return _context2.stop();
|
|
66
|
+
}
|
|
67
|
+
}, _callee2);
|
|
68
|
+
}));
|
|
69
|
+
return function sendMessage(_x2) {
|
|
70
|
+
return _ref4.apply(this, arguments);
|
|
71
|
+
};
|
|
72
|
+
}();
|
|
73
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["request","fetchAppConfig","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref","url","appNo","pt","tc","response","wrap","_callee$","_context","prev","next","post","concat","params","sent","abrupt","data","stop","_x","apply","arguments","sendMessage","_ref4","_callee2","_ref3","msg","_callee2$","_context2","_x2"],"sources":["../../../src/services/api.ts"],"sourcesContent":["import { request } from '@/utils/request';\n\n// 服务端API响应接口\nexport interface ServerApiResponse<T = unknown> {\n data: T;\n code: string;\n success: boolean;\n message: string;\n serverTime: number;\n traceId: string;\n}\n\n// 标准API响应类型\nexport interface ApiResponse<T> {\n success: boolean;\n data: T;\n message?: string;\n code?: string;\n}\n\n// 聊天配置类型\nexport interface ChatConfig {\n id: string;\n name: string;\n settings: Record<string, unknown>;\n}\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const fetchAppConfig = async ({ url, appNo, pt, tc }: { url: string; appNo: string; pt: string; tc: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/config/${appNo}/initApp`, {}, {\n params: {\n pt, tc,\n },\n });\n return response.data;\n};\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const sendMessage = async ({ url, appNo, pt, tc, msg }: { url: string; appNo: string; pt: string; tc: string; msg: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/${appNo}/sendMsg`, {\n pt, tc, msg,\n });\n return response.data;\n};\n"],"mappings":";;AAAA,SAASA,OAAO;;AAEhB;;AAUA;;AAQA;;AAOA;AACA;AACA;AACA;AACA,OAAO,IAAMC,cAAc;EAAA,IAAAC,KAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAAC,IAAA;IAAA,IAAAC,GAAA,EAAAC,KAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,QAAA;IAAA,OAAAR,mBAAA,GAAAS,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAST,GAAG,GAAAD,IAAA,CAAHC,GAAG,EAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK,EAAEC,EAAE,GAAAH,IAAA,CAAFG,EAAE,EAAEC,EAAE,GAAAJ,IAAA,CAAFI,EAAE;UAAAI,QAAA,CAAAE,IAAA;UAAA,OAChCjB,OAAO,CAACkB,IAAI,IAAAC,MAAA,CAA6BX,GAAG,uBAAAW,MAAA,CAAoBV,KAAK,eAAY,CAAC,CAAC,EAAE;YAC1GW,MAAM,EAAE;cACNV,EAAE,EAAFA,EAAE;cAAEC,EAAE,EAAFA;YACN;UACF,CAAC,CAAC;QAAA;UAJIC,QAAQ,GAAAG,QAAA,CAAAM,IAAA;UAAA,OAAAN,QAAA,CAAAO,MAAA,WAKPV,QAAQ,CAACW,IAAI;QAAA;QAAA;UAAA,OAAAR,QAAA,CAAAS,IAAA;MAAA;IAAA,GAAAlB,OAAA;EAAA,CACrB;EAAA,gBAPYL,cAAcA,CAAAwB,EAAA;IAAA,OAAAvB,KAAA,CAAAwB,KAAA,OAAAC,SAAA;EAAA;AAAA,GAO1B;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAMC,WAAW;EAAA,IAAAC,KAAA,GAAA1B,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAyB,SAAAC,KAAA;IAAA,IAAAvB,GAAA,EAAAC,KAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAqB,GAAA,EAAApB,QAAA;IAAA,OAAAR,mBAAA,GAAAS,IAAA,UAAAoB,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAlB,IAAA,GAAAkB,SAAA,CAAAjB,IAAA;QAAA;UAAST,GAAG,GAAAuB,KAAA,CAAHvB,GAAG,EAAEC,KAAK,GAAAsB,KAAA,CAALtB,KAAK,EAAEC,EAAE,GAAAqB,KAAA,CAAFrB,EAAE,EAAEC,EAAE,GAAAoB,KAAA,CAAFpB,EAAE,EAAEqB,GAAG,GAAAD,KAAA,CAAHC,GAAG;UAAAE,SAAA,CAAAjB,IAAA;UAAA,OAClCjB,OAAO,CAACkB,IAAI,IAAAC,MAAA,CAA6BX,GAAG,gBAAAW,MAAA,CAAaV,KAAK,eAAY;YAC/FC,EAAE,EAAFA,EAAE;YAAEC,EAAE,EAAFA,EAAE;YAAEqB,GAAG,EAAHA;UACV,CAAC,CAAC;QAAA;UAFIpB,QAAQ,GAAAsB,SAAA,CAAAb,IAAA;UAAA,OAAAa,SAAA,CAAAZ,MAAA,WAGPV,QAAQ,CAACW,IAAI;QAAA;QAAA;UAAA,OAAAW,SAAA,CAAAV,IAAA;MAAA;IAAA,GAAAM,QAAA;EAAA,CACrB;EAAA,gBALYF,WAAWA,CAAAO,GAAA;IAAA,OAAAN,KAAA,CAAAH,KAAA,OAAAC,SAAA;EAAA;AAAA,GAKvB"}
|