@ai-group/chat-sdk 0.2.5 → 0.2.8
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 +93 -214
- package/dist/cjs/assets/arrow-down.png +0 -0
- package/dist/cjs/assets/arrow-up.png +0 -0
- package/dist/cjs/assets/chatKnowledge.png +0 -0
- package/dist/cjs/assets/completed-black.png +0 -0
- package/dist/cjs/assets/completed.png +0 -0
- package/dist/cjs/assets/document-black.png +0 -0
- package/dist/cjs/assets/document.png +0 -0
- package/dist/cjs/assets/document.svg +16 -0
- package/dist/cjs/assets/empty.png +0 -0
- package/dist/cjs/assets/group.png +0 -0
- package/dist/cjs/assets/qa-black.png +0 -0
- package/dist/cjs/assets/qa.png +0 -0
- package/dist/cjs/assets/skillNo-black.png +0 -0
- package/dist/cjs/assets/skillNo.png +0 -0
- package/dist/cjs/assets/tools-black.png +0 -0
- package/dist/cjs/assets/tools.png +0 -0
- package/dist/cjs/assets/user.png +0 -0
- package/dist/cjs/client/base.d.ts +9 -0
- package/dist/cjs/client/base.js +18 -0
- package/dist/cjs/client/base.js.map +7 -0
- package/dist/cjs/client/restClient.d.ts +0 -0
- package/dist/cjs/client/restClient.js +1 -0
- package/dist/cjs/client/restClient.js.map +7 -0
- package/dist/cjs/client/wsClient.d.ts +0 -0
- package/dist/cjs/client/wsClient.js +1 -0
- package/dist/cjs/client/wsClient.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +484 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/index.d.ts +12 -0
- package/dist/cjs/components/XAiChatbot/index.js +365 -0
- package/dist/cjs/components/XAiChatbot/index.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/styles.d.ts +72 -0
- package/dist/cjs/components/XAiChatbot/styles.js +426 -0
- package/dist/cjs/components/XAiChatbot/styles.js.map +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +127 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +7 -0
- package/dist/cjs/components/XAiProvider/index.d.ts +4 -0
- package/dist/cjs/components/XAiProvider/index.js +115 -0
- package/dist/cjs/components/XAiProvider/index.js.map +7 -0
- package/dist/cjs/components/XAiSDK.d.ts +10 -0
- package/dist/cjs/components/XAiSDK.js +53 -0
- package/dist/cjs/components/XAiSDK.js.map +7 -0
- package/dist/cjs/components/XAiWebSDKWrapper.d.ts +9 -0
- package/dist/cjs/components/XAiWebSDKWrapper.js +70 -0
- package/dist/cjs/components/XAiWebSDKWrapper.js.map +7 -0
- package/dist/cjs/context/AiProviderContext.d.ts +12 -0
- package/dist/cjs/context/AiProviderContext.js +74 -0
- package/dist/cjs/context/AiProviderContext.js.map +7 -0
- package/dist/cjs/context/ThemeContext.d.ts +20 -0
- package/dist/cjs/context/ThemeContext.js +37 -0
- package/dist/cjs/context/ThemeContext.js.map +7 -0
- package/dist/cjs/hooks/useAgentGenerator.d.ts +72 -0
- package/dist/cjs/hooks/useAgentGenerator.js +487 -0
- package/dist/cjs/hooks/useAgentGenerator.js.map +7 -0
- package/dist/cjs/hooks/useEventStreamRequest.d.ts +30 -0
- package/dist/cjs/hooks/useEventStreamRequest.js +188 -0
- package/dist/cjs/hooks/useEventStreamRequest.js.map +7 -0
- package/dist/cjs/hooks/useProviderContext.d.ts +33 -0
- package/dist/cjs/hooks/useProviderContext.js +105 -0
- package/dist/cjs/hooks/useProviderContext.js.map +7 -0
- package/dist/cjs/hooks/useXAiSDK.d.ts +14 -0
- package/dist/cjs/hooks/useXAiSDK.js +75 -0
- package/dist/cjs/hooks/useXAiSDK.js.map +7 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +61 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/services/api.d.ts +69 -0
- package/dist/cjs/services/api.js +49 -0
- package/dist/cjs/services/api.js.map +7 -0
- package/dist/cjs/styles/common.d.ts +64 -0
- package/dist/cjs/styles/common.js +144 -0
- package/dist/cjs/styles/common.js.map +7 -0
- package/dist/cjs/styles/markdown.d.ts +3 -0
- package/dist/cjs/styles/markdown.js +193 -0
- package/dist/cjs/styles/markdown.js.map +7 -0
- package/dist/cjs/types/XAiChatbot.d.ts +159 -0
- package/dist/cjs/types/XAiChatbot.js +18 -0
- package/dist/cjs/types/XAiChatbot.js.map +7 -0
- package/dist/cjs/types/XAiMessage.d.ts +121 -0
- package/dist/cjs/types/XAiMessage.js +55 -0
- package/dist/cjs/types/XAiMessage.js.map +7 -0
- package/dist/cjs/types/XAiProvider.d.ts +46 -0
- package/dist/cjs/types/XAiProvider.js +50 -0
- package/dist/cjs/types/XAiProvider.js.map +7 -0
- package/dist/cjs/types/index.d.ts +3 -0
- package/dist/cjs/types/index.js +28 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/mdx.d.ts +18 -0
- package/dist/cjs/utils/chat.d.ts +34 -0
- package/dist/cjs/utils/chat.js +1 -0
- package/dist/cjs/utils/chat.js.map +7 -0
- package/dist/cjs/utils/index.d.ts +2 -0
- package/dist/cjs/utils/index.js +49 -0
- package/dist/cjs/utils/index.js.map +7 -0
- package/dist/cjs/utils/providerManager.d.ts +22 -0
- package/dist/cjs/utils/providerManager.js +73 -0
- package/dist/cjs/utils/providerManager.js.map +7 -0
- package/dist/cjs/utils/request.d.ts +78 -0
- package/dist/cjs/utils/request.example.d.ts +39 -0
- package/dist/cjs/utils/request.example.js +211 -0
- package/dist/cjs/utils/request.example.js.map +7 -0
- package/dist/cjs/utils/request.js +231 -0
- package/dist/cjs/utils/request.js.map +7 -0
- package/dist/cjs/utils/umdEntry.d.ts +14 -0
- package/dist/cjs/utils/umdEntry.js +97 -0
- package/dist/cjs/utils/umdEntry.js.map +7 -0
- package/dist/esm/assets/user.png +0 -0
- package/dist/esm/client/base.d.ts +9 -0
- package/dist/esm/client/restClient.d.ts +0 -0
- package/dist/esm/client/wsClient.d.ts +0 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
- package/dist/esm/components/XAiChatbot/index.d.ts +12 -0
- package/dist/esm/components/XAiChatbot/index.js +17 -11
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +72 -0
- package/dist/esm/components/XAiChatbot/styles.js +37 -38
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
- package/dist/esm/components/XAiProvider/index.d.ts +4 -0
- package/dist/esm/components/XAiProvider/index.js +8 -1
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiSDK.d.ts +10 -0
- package/dist/esm/components/XAiWebSDKWrapper.d.ts +9 -0
- package/dist/esm/components/XAiWebSDKWrapper.js +4 -1
- package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -1
- package/dist/esm/context/AiProviderContext.d.ts +12 -0
- package/dist/esm/context/ThemeContext.d.ts +20 -0
- package/dist/esm/hooks/useAgentGenerator.d.ts +72 -0
- package/dist/esm/hooks/useAgentGenerator.js +113 -39
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/hooks/useEventStreamRequest.d.ts +30 -0
- package/dist/esm/hooks/useProviderContext.d.ts +33 -0
- package/dist/esm/hooks/useXAiSDK.d.ts +14 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/services/api.d.ts +69 -0
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/styles/common.d.ts +64 -0
- package/dist/esm/styles/markdown.d.ts +3 -0
- package/dist/esm/types/XAiChatbot.d.ts +159 -0
- package/dist/esm/types/XAiMessage.d.ts +121 -0
- package/dist/esm/types/XAiProvider.d.ts +46 -0
- package/dist/esm/types/XAiProvider.js +7 -0
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/index.d.ts +3 -0
- package/dist/esm/utils/chat.d.ts +34 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/providerManager.d.ts +22 -0
- package/dist/esm/utils/request.d.ts +78 -0
- package/dist/esm/utils/request.example.d.ts +39 -0
- package/dist/esm/utils/umdEntry.d.ts +14 -0
- package/dist/esm/utils/umdEntry.js +22 -18
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/hooks/useEventStreamRequest.ts
|
|
20
|
+
var useEventStreamRequest_exports = {};
|
|
21
|
+
__export(useEventStreamRequest_exports, {
|
|
22
|
+
default: () => useEventStreamRequest_default,
|
|
23
|
+
useEventStreamRequest: () => useEventStreamRequest
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(useEventStreamRequest_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_fetch_event_source = require("@microsoft/fetch-event-source");
|
|
28
|
+
var import_antd = require("antd");
|
|
29
|
+
var import_XAiMessage = require("../types/XAiMessage");
|
|
30
|
+
var import_utils = require("../utils/index");
|
|
31
|
+
var import_request = require("../utils/request");
|
|
32
|
+
var useEventStreamRequest = ({
|
|
33
|
+
onOpen = () => {
|
|
34
|
+
},
|
|
35
|
+
onError = () => {
|
|
36
|
+
},
|
|
37
|
+
streaming = true,
|
|
38
|
+
onClose = () => {
|
|
39
|
+
},
|
|
40
|
+
textSpeed = 60
|
|
41
|
+
}) => {
|
|
42
|
+
const contentCacheRef = (0, import_react.useRef)([]);
|
|
43
|
+
const streamStatusRef = (0, import_react.useRef)(0);
|
|
44
|
+
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
45
|
+
const loadingRef = (0, import_react.useRef)(loading);
|
|
46
|
+
const [responseData, setResponseData] = (0, import_react.useState)({ content: "" });
|
|
47
|
+
const controllerRef = (0, import_react.useRef)(null);
|
|
48
|
+
const stop = () => {
|
|
49
|
+
var _a;
|
|
50
|
+
(_a = controllerRef.current) == null ? void 0 : _a.abort();
|
|
51
|
+
contentCacheRef.current = [];
|
|
52
|
+
setLoading(false);
|
|
53
|
+
};
|
|
54
|
+
const start = async (url, values, headers = {}) => {
|
|
55
|
+
const prefixUrl = url;
|
|
56
|
+
setResponseData({});
|
|
57
|
+
setLoading(true);
|
|
58
|
+
controllerRef.current = new AbortController();
|
|
59
|
+
const params = {
|
|
60
|
+
...values
|
|
61
|
+
};
|
|
62
|
+
const { signal } = controllerRef.current;
|
|
63
|
+
if (streaming) {
|
|
64
|
+
(0, import_fetch_event_source.fetchEventSource)(prefixUrl, {
|
|
65
|
+
method: "POST",
|
|
66
|
+
openWhenHidden: true,
|
|
67
|
+
headers: {
|
|
68
|
+
"Content-Type": "application/json",
|
|
69
|
+
"Cache-Control": "no-cache",
|
|
70
|
+
stream: "true",
|
|
71
|
+
...headers
|
|
72
|
+
},
|
|
73
|
+
signal,
|
|
74
|
+
body: JSON.stringify(params),
|
|
75
|
+
async onopen(response) {
|
|
76
|
+
streamStatusRef.current = 1;
|
|
77
|
+
if (response.ok && response.headers.get("content-type") === import_fetch_event_source.EventStreamContentType) {
|
|
78
|
+
onOpen == null ? void 0 : onOpen(response);
|
|
79
|
+
} else {
|
|
80
|
+
if (response.status === 401) {
|
|
81
|
+
import_antd.message.error("用户未登录,即将前往登录……");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (response.status === 500) {
|
|
85
|
+
import_antd.message.error("服务器错误,请稍后重试。");
|
|
86
|
+
} else if (response.status > 500) {
|
|
87
|
+
import_antd.message.error("网络不给力,请稍后重试。");
|
|
88
|
+
}
|
|
89
|
+
if (response.status >= 500) {
|
|
90
|
+
setResponseData((prevResponseData) => {
|
|
91
|
+
return {
|
|
92
|
+
...prevResponseData,
|
|
93
|
+
content: "网络不给力,请稍后重试~~~~~",
|
|
94
|
+
requestId: "",
|
|
95
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
96
|
+
httpCode: response.status,
|
|
97
|
+
error: true,
|
|
98
|
+
code: ""
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
onError == null ? void 0 : onError(new Error(`Unexpected response status: ${response.status}`));
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
onmessage: (event) => {
|
|
106
|
+
var _a;
|
|
107
|
+
const eventData = (0, import_utils.safeJsonParse)(event.data, {});
|
|
108
|
+
if (eventData.success !== true) {
|
|
109
|
+
setResponseData({
|
|
110
|
+
...eventData,
|
|
111
|
+
code: eventData.code,
|
|
112
|
+
content: eventData.message || "网络不给力,请稍后重试~~",
|
|
113
|
+
requestId: eventData.requestId,
|
|
114
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
115
|
+
httpCode: 200,
|
|
116
|
+
error: true
|
|
117
|
+
});
|
|
118
|
+
stop();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
(_a = contentCacheRef.current) == null ? void 0 : _a.push(eventData);
|
|
122
|
+
},
|
|
123
|
+
onerror: (error) => {
|
|
124
|
+
streamStatusRef.current = 2;
|
|
125
|
+
setLoading(false);
|
|
126
|
+
onError == null ? void 0 : onError(error);
|
|
127
|
+
},
|
|
128
|
+
onclose: () => {
|
|
129
|
+
streamStatusRef.current = 2;
|
|
130
|
+
onClose();
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
} else {
|
|
134
|
+
try {
|
|
135
|
+
const response = await import_request.request.post(url, params);
|
|
136
|
+
setResponseData(response);
|
|
137
|
+
setLoading(false);
|
|
138
|
+
} catch (error) {
|
|
139
|
+
onError == null ? void 0 : onError(error);
|
|
140
|
+
setLoading(false);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
(0, import_react.useEffect)(() => {
|
|
145
|
+
loadingRef.current = loading;
|
|
146
|
+
}, [loading]);
|
|
147
|
+
(0, import_react.useEffect)(() => {
|
|
148
|
+
const timer = setInterval(() => {
|
|
149
|
+
var _a, _b;
|
|
150
|
+
if (((_a = contentCacheRef.current) == null ? void 0 : _a.length) > 0) {
|
|
151
|
+
const eventData = (_b = contentCacheRef.current) == null ? void 0 : _b.shift();
|
|
152
|
+
const newData = eventData == null ? void 0 : eventData.data;
|
|
153
|
+
setResponseData((prevResponseData) => {
|
|
154
|
+
const prevContent = prevResponseData.content ?? "";
|
|
155
|
+
return {
|
|
156
|
+
...eventData,
|
|
157
|
+
code: eventData == null ? void 0 : eventData.code,
|
|
158
|
+
content: `${prevContent}${newData}`,
|
|
159
|
+
requestId: eventData == null ? void 0 : eventData.requestId,
|
|
160
|
+
role: import_XAiMessage.MessageRole.assistant
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
} else if (streamStatusRef.current === 2 && loadingRef.current) {
|
|
164
|
+
streamStatusRef.current = 0;
|
|
165
|
+
setLoading(false);
|
|
166
|
+
}
|
|
167
|
+
}, textSpeed);
|
|
168
|
+
return () => clearInterval(timer);
|
|
169
|
+
}, []);
|
|
170
|
+
(0, import_react.useEffect)(() => {
|
|
171
|
+
return () => {
|
|
172
|
+
stop();
|
|
173
|
+
};
|
|
174
|
+
}, []);
|
|
175
|
+
return {
|
|
176
|
+
responseData,
|
|
177
|
+
loading,
|
|
178
|
+
start,
|
|
179
|
+
stop,
|
|
180
|
+
onError
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
var useEventStreamRequest_default = useEventStreamRequest;
|
|
184
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
185
|
+
0 && (module.exports = {
|
|
186
|
+
useEventStreamRequest
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=useEventStreamRequest.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useEventStreamRequest.ts"],
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { XAiContextType } from "../context/AiProviderContext";
|
|
2
|
+
export interface UseProviderContextOptions<T> {
|
|
3
|
+
props: T;
|
|
4
|
+
providerProps?: (keyof XAiContextType)[];
|
|
5
|
+
mergeLogic?: (props: T, context: XAiContextType | undefined) => T;
|
|
6
|
+
}
|
|
7
|
+
export interface UseProviderContextReturn<T> {
|
|
8
|
+
mergedProps: T;
|
|
9
|
+
isInProvider: boolean;
|
|
10
|
+
context: XAiContextType | undefined;
|
|
11
|
+
getProviderValue: <K extends keyof XAiContextType>(key: K) => XAiContextType[K] | undefined;
|
|
12
|
+
}
|
|
13
|
+
export type MethodCaller<T extends any[] = any[], R = any> = (...args: T) => R;
|
|
14
|
+
export interface ProviderMethods {
|
|
15
|
+
isInProvider: boolean;
|
|
16
|
+
sendMessage: MethodCaller<[string], void>;
|
|
17
|
+
stopGeneration: MethodCaller<[], void>;
|
|
18
|
+
clearMessages: MethodCaller<[], void>;
|
|
19
|
+
regenerateLastMessage: MethodCaller<[string], void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 通用的 Provider 上下文 Hook
|
|
23
|
+
* 用于判断组件是否在 XAiProvider 中,并合并相关属性
|
|
24
|
+
*/
|
|
25
|
+
export declare const useProviderContext: <T extends Record<string, any>>(options: UseProviderContextOptions<T>) => UseProviderContextReturn<T>;
|
|
26
|
+
/**
|
|
27
|
+
* 专门为 XAiChatbot 设计的 Hook
|
|
28
|
+
*/
|
|
29
|
+
export declare const useChatbotContext: (componentProps: any) => UseProviderContextReturn<any>;
|
|
30
|
+
/**
|
|
31
|
+
* 通用的 Provider 方法调用 Hook
|
|
32
|
+
*/
|
|
33
|
+
export declare const useProviderMethods: () => ProviderMethods;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/hooks/useProviderContext.ts
|
|
20
|
+
var useProviderContext_exports = {};
|
|
21
|
+
__export(useProviderContext_exports, {
|
|
22
|
+
useChatbotContext: () => useChatbotContext,
|
|
23
|
+
useProviderContext: () => useProviderContext,
|
|
24
|
+
useProviderMethods: () => useProviderMethods
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(useProviderContext_exports);
|
|
27
|
+
var import_AiProviderContext = require("../context/AiProviderContext");
|
|
28
|
+
var useProviderContext = (options) => {
|
|
29
|
+
const { props, providerProps, mergeLogic } = options;
|
|
30
|
+
const context = (0, import_AiProviderContext.useXAi)();
|
|
31
|
+
const isInProvider = !!(context == null ? void 0 : context.isInProvider);
|
|
32
|
+
let mergedProps;
|
|
33
|
+
if (mergeLogic) {
|
|
34
|
+
mergedProps = mergeLogic(props, context);
|
|
35
|
+
} else if (context && isInProvider) {
|
|
36
|
+
mergedProps = { ...props, ...context };
|
|
37
|
+
} else {
|
|
38
|
+
mergedProps = props;
|
|
39
|
+
}
|
|
40
|
+
const getProviderValue = (key) => {
|
|
41
|
+
return context == null ? void 0 : context[key];
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
mergedProps,
|
|
45
|
+
isInProvider,
|
|
46
|
+
context,
|
|
47
|
+
getProviderValue
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
var useChatbotContext = (componentProps) => {
|
|
51
|
+
return useProviderContext({
|
|
52
|
+
props: componentProps,
|
|
53
|
+
mergeLogic: (props, context) => {
|
|
54
|
+
if (!(context == null ? void 0 : context.isInProvider)) {
|
|
55
|
+
return props;
|
|
56
|
+
}
|
|
57
|
+
const { messages: contextMessages, loading: contextLoading, ...restContext } = context;
|
|
58
|
+
return {
|
|
59
|
+
...props,
|
|
60
|
+
...restContext,
|
|
61
|
+
// 优先使用 Provider 的状态,如果没有则使用 props
|
|
62
|
+
messages: contextMessages || props.messages || [],
|
|
63
|
+
loading: contextLoading || props.loading || false,
|
|
64
|
+
// 确保 onSend 等回调函数也被合并
|
|
65
|
+
onSend: context.onSend || props.onSend,
|
|
66
|
+
onClear: context.onClear || props.onClear,
|
|
67
|
+
onStop: context.onStop || props.onStop,
|
|
68
|
+
onSuggestMessageClick: context.onSuggestMessageClick || props.onSuggestMessageClick,
|
|
69
|
+
onMessagesActionsCallback: context.onMessagesActionsCallback || props.onMessagesActionsCallback
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
var useProviderMethods = () => {
|
|
75
|
+
const context = (0, import_AiProviderContext.useXAi)();
|
|
76
|
+
const callMethod = (methodName, ...args) => {
|
|
77
|
+
if ((context == null ? void 0 : context.isInProvider) && typeof context[methodName] === "function") {
|
|
78
|
+
return context[methodName](...args);
|
|
79
|
+
}
|
|
80
|
+
return void 0;
|
|
81
|
+
};
|
|
82
|
+
const createMethodCaller = (providerMethod, argsTransformer) => {
|
|
83
|
+
return (...args) => {
|
|
84
|
+
if ((context == null ? void 0 : context.isInProvider) && typeof context[providerMethod] === "function") {
|
|
85
|
+
const transformedArgs = argsTransformer ? argsTransformer(args) : args;
|
|
86
|
+
return context[providerMethod](...transformedArgs);
|
|
87
|
+
}
|
|
88
|
+
return void 0;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
isInProvider: !!(context == null ? void 0 : context.isInProvider),
|
|
93
|
+
sendMessage: createMethodCaller("onSend"),
|
|
94
|
+
stopGeneration: createMethodCaller("onStop"),
|
|
95
|
+
clearMessages: createMethodCaller("onClear"),
|
|
96
|
+
regenerateLastMessage: createMethodCaller("onSend")
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
+
0 && (module.exports = {
|
|
101
|
+
useChatbotContext,
|
|
102
|
+
useProviderContext,
|
|
103
|
+
useProviderMethods
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=useProviderContext.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useProviderContext.ts"],
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAuB;AAuChB,IAAM,qBAAqB,CAChC,YACgC;AAChC,QAAM,EAAE,OAAO,eAAe,WAAW,IAAI;AAG7C,QAAM,cAAU,iCAAO;AAGvB,QAAM,eAAe,CAAC,EAAC,mCAAS;AAGhC,MAAI;AACJ,MAAI,YAAY;AACd,kBAAc,WAAW,OAAO,OAAO;AAAA,EACzC,WAAW,WAAW,cAAc;AAClC,kBAAc,EAAE,GAAG,OAAO,GAAG,QAAQ;AAAA,EACvC,OAAO;AACL,kBAAc;AAAA,EAChB;AAGA,QAAM,mBAAmB,CAAiC,QAA0C;AAClG,WAAO,mCAAU;AAAA,EACnB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,CAAC,mBAAwB;AACxD,SAAO,mBAAmB;AAAA,IACxB,OAAO;AAAA,IACP,YAAY,CAAC,OAAO,YAAY;AAC9B,UAAI,EAAC,mCAAS,eAAc;AAC1B,eAAO;AAAA,MACT;AAGA,YAAM,EAAE,UAAU,iBAAiB,SAAS,gBAAgB,GAAG,YAAY,IAAI;AAC/E,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,QAEH,UAAU,mBAAmB,MAAM,YAAY,CAAC;AAAA,QAChD,SAAS,kBAAkB,MAAM,WAAW;AAAA;AAAA,QAE5C,QAAQ,QAAQ,UAAU,MAAM;AAAA,QAChC,SAAS,QAAQ,WAAW,MAAM;AAAA,QAClC,QAAQ,QAAQ,UAAU,MAAM;AAAA,QAChC,uBAAuB,QAAQ,yBAAyB,MAAM;AAAA,QAC9D,2BAA2B,QAAQ,6BAA6B,MAAM;AAAA,MACxE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAKO,IAAM,qBAAqB,MAAuB;AACvD,QAAM,cAAU,iCAAO;AAEvB,QAAM,aAAa,CAAC,eAAqC,SAAgB;AACvE,SAAI,mCAAS,iBAAgB,OAAO,QAAQ,UAAU,MAAM,YAAY;AACtE,aAAQ,QAAQ,UAAU,EAAe,GAAG,IAAI;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAGA,QAAM,qBAAqB,CACzB,gBACA,oBACiB;AACjB,WAAO,IAAI,SAAgB;AAEzB,WAAI,mCAAS,iBAAgB,OAAO,QAAQ,cAAsC,MAAM,YAAY;AAClG,cAAM,kBAAkB,kBAAkB,gBAAgB,IAAI,IAAI;AAClE,eAAQ,QAAQ,cAAsC,EAAe,GAAG,eAAe;AAAA,MACzF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,CAAC,EAAC,mCAAS;AAAA,IACzB,aAAa,mBAAmB,QAAQ;AAAA,IACxC,gBAAgB,mBAAmB,QAAQ;AAAA,IAC3C,eAAe,mBAAmB,SAAS;AAAA,IAC3C,uBAAuB,mBAAmB,QAAQ;AAAA,EACpD;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XAiProviderProps } from "../types/XAiProvider";
|
|
3
|
+
export interface UseXAiSDKOptions extends XAiProviderProps {
|
|
4
|
+
containerId?: string;
|
|
5
|
+
width?: string | number;
|
|
6
|
+
height?: string | number;
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
}
|
|
10
|
+
export declare const useXAiSDK: (options: UseXAiSDKOptions) => {
|
|
11
|
+
containerRef: React.RefObject<HTMLDivElement | null>;
|
|
12
|
+
render: () => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
};
|
|
14
|
+
export default useXAiSDK;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/hooks/useXAiSDK.tsx
|
|
30
|
+
var useXAiSDK_exports = {};
|
|
31
|
+
__export(useXAiSDK_exports, {
|
|
32
|
+
default: () => useXAiSDK_default,
|
|
33
|
+
useXAiSDK: () => useXAiSDK
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(useXAiSDK_exports);
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var import_XAiProvider = __toESM(require("../components/XAiProvider"));
|
|
38
|
+
var import_XAiChatbot = __toESM(require("../components/XAiChatbot"));
|
|
39
|
+
var useXAiSDK = (options) => {
|
|
40
|
+
const containerRef = (0, import_react.useRef)(null);
|
|
41
|
+
const {
|
|
42
|
+
containerId = "xai-chatbot-container",
|
|
43
|
+
width = "400px",
|
|
44
|
+
height = "600px",
|
|
45
|
+
className,
|
|
46
|
+
style,
|
|
47
|
+
...providerProps
|
|
48
|
+
} = options;
|
|
49
|
+
(0, import_react.useEffect)(() => {
|
|
50
|
+
if (containerRef.current) {
|
|
51
|
+
const container = containerRef.current;
|
|
52
|
+
if (!container.querySelector(".xai-chatbot-wrapper")) {
|
|
53
|
+
const wrapper = document.createElement("div");
|
|
54
|
+
wrapper.className = "xai-chatbot-wrapper";
|
|
55
|
+
wrapper.style.width = typeof width === "number" ? `${width}px` : width;
|
|
56
|
+
wrapper.style.height = typeof height === "number" ? `${height}px` : height;
|
|
57
|
+
if (className)
|
|
58
|
+
wrapper.className += ` ${className}`;
|
|
59
|
+
if (style)
|
|
60
|
+
Object.assign(wrapper.style, style);
|
|
61
|
+
container.appendChild(wrapper);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, [containerId, width, height, className, style]);
|
|
65
|
+
return {
|
|
66
|
+
containerRef,
|
|
67
|
+
render: () => /* @__PURE__ */ import_react.default.createElement("div", { ref: containerRef, id: containerId }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ...providerProps }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
var useXAiSDK_default = useXAiSDK;
|
|
71
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
72
|
+
0 && (module.exports = {
|
|
73
|
+
useXAiSDK
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=useXAiSDK.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useXAiSDK.tsx"],
|
|
4
|
+
"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; "],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC;AAEzC,yBAAwB;AACxB,wBAAuB;AAUhB,IAAM,YAAY,CAAC,YAA8B;AACtD,QAAM,mBAAe,qBAAuB,IAAI;AAChD,QAAM;AAAA,IACJ,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,8BAAU,MAAM;AACd,QAAI,aAAa,SAAS;AAExB,YAAM,YAAY,aAAa;AAC/B,UAAI,CAAC,UAAU,cAAc,sBAAsB,GAAG;AAEpD,cAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,gBAAQ,YAAY;AACpB,gBAAQ,MAAM,QAAQ,OAAO,UAAU,WAAW,GAAG,YAAY;AACjE,gBAAQ,MAAM,SAAS,OAAO,WAAW,WAAW,GAAG,aAAa;AACpE,YAAI;AAAW,kBAAQ,aAAa,IAAI;AACxC,YAAI;AAAO,iBAAO,OAAO,QAAQ,OAAO,KAAK;AAE7C,kBAAU,YAAY,OAAO;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,QAAQ,WAAW,KAAK,CAAC;AAEjD,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MACN,6BAAAA,QAAA,cAAC,SAAI,KAAK,cAAc,IAAI,eAC1B,6BAAAA,QAAA,cAAC,mBAAAC,SAAA,EAAa,GAAG,iBACf,6BAAAD,QAAA,cAAC,kBAAAE,SAAA,IAAW,CACd,CACF;AAAA,EAEJ;AACF;AAEA,IAAO,oBAAQ;",
|
|
6
|
+
"names": ["React", "XAiProvider", "XAiChatbot"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useXAi } from './context/AiProviderContext';
|
|
2
|
+
import XAiProvider from './components/XAiProvider';
|
|
3
|
+
import XAiChatbot from './components/XAiChatbot';
|
|
4
|
+
import XAiSDK from './components/XAiSDK';
|
|
5
|
+
import XAiWebSDKWrapper from './components/XAiWebSDKWrapper';
|
|
6
|
+
import useXAiSDK from './hooks/useXAiSDK';
|
|
7
|
+
import request from './utils/request';
|
|
8
|
+
export * from './types';
|
|
9
|
+
export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiWebSDKWrapper, useXAiSDK, request, };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
XAiChatbot: () => import_XAiChatbot.default,
|
|
34
|
+
XAiProvider: () => import_XAiProvider.default,
|
|
35
|
+
XAiSDK: () => import_XAiSDK.default,
|
|
36
|
+
XAiWebSDKWrapper: () => import_XAiWebSDKWrapper.default,
|
|
37
|
+
request: () => import_request.default,
|
|
38
|
+
useXAi: () => import_AiProviderContext.useXAi,
|
|
39
|
+
useXAiSDK: () => import_useXAiSDK.default
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(src_exports);
|
|
42
|
+
var import_AiProviderContext = require("./context/AiProviderContext");
|
|
43
|
+
var import_XAiProvider = __toESM(require("./components/XAiProvider"));
|
|
44
|
+
var import_XAiChatbot = __toESM(require("./components/XAiChatbot"));
|
|
45
|
+
var import_XAiSDK = __toESM(require("./components/XAiSDK"));
|
|
46
|
+
var import_XAiWebSDKWrapper = __toESM(require("./components/XAiWebSDKWrapper"));
|
|
47
|
+
var import_useXAiSDK = __toESM(require("./hooks/useXAiSDK"));
|
|
48
|
+
var import_request = __toESM(require("./utils/request"));
|
|
49
|
+
__reExport(src_exports, require("./types"), module.exports);
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
XAiChatbot,
|
|
53
|
+
XAiProvider,
|
|
54
|
+
XAiSDK,
|
|
55
|
+
XAiWebSDKWrapper,
|
|
56
|
+
request,
|
|
57
|
+
useXAi,
|
|
58
|
+
useXAiSDK,
|
|
59
|
+
...require("./types")
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,sCAAAA;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,8BAAAC;AAAA,EAAA;AAAA,oCAAAC;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAEpB,wBAAc,oBATd;",
|
|
6
|
+
"names": ["XAiChatbot", "XAiProvider", "XAiSDK", "XAiWebSDKWrapper", "request", "useXAiSDK"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface ServerApiResponse<T = unknown> {
|
|
2
|
+
data: T;
|
|
3
|
+
code: string;
|
|
4
|
+
success: boolean;
|
|
5
|
+
message: string;
|
|
6
|
+
serverTime: number;
|
|
7
|
+
traceId: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiResponse<T> {
|
|
10
|
+
success: boolean;
|
|
11
|
+
data: T;
|
|
12
|
+
message?: string;
|
|
13
|
+
code?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ChatConfig {
|
|
16
|
+
botNo: string;
|
|
17
|
+
appNo: string;
|
|
18
|
+
appName: string;
|
|
19
|
+
appTheme: string;
|
|
20
|
+
description: string;
|
|
21
|
+
icon: string;
|
|
22
|
+
onboardingInfo: {
|
|
23
|
+
prologue: string;
|
|
24
|
+
suggested_questions: string[];
|
|
25
|
+
};
|
|
26
|
+
appVersionNo: string;
|
|
27
|
+
publishDTO: {
|
|
28
|
+
id: number;
|
|
29
|
+
tenantId: string;
|
|
30
|
+
botNo: string;
|
|
31
|
+
publishNo: string;
|
|
32
|
+
publishTime: string;
|
|
33
|
+
publishVersionNo: string;
|
|
34
|
+
publishVersionDesc: string;
|
|
35
|
+
publishAppType: string;
|
|
36
|
+
platformConfigInfo: string;
|
|
37
|
+
appNo: string;
|
|
38
|
+
appVersionNo: string;
|
|
39
|
+
gmtCreated: string;
|
|
40
|
+
enableFlag: number;
|
|
41
|
+
gmtModified: string;
|
|
42
|
+
creator: string;
|
|
43
|
+
modifier: string;
|
|
44
|
+
isDeleted: string;
|
|
45
|
+
authLoginInfoDTO: Record<string, unknown>;
|
|
46
|
+
shareLink: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 获取聊天配置
|
|
51
|
+
* 使用request,会自动添加token
|
|
52
|
+
*/
|
|
53
|
+
export declare const fetchAppConfig: ({ url, appNo, pt, tc }: {
|
|
54
|
+
url: string;
|
|
55
|
+
appNo: string;
|
|
56
|
+
pt: string;
|
|
57
|
+
tc: string;
|
|
58
|
+
}) => Promise<ApiResponse<ChatConfig>>;
|
|
59
|
+
/**
|
|
60
|
+
* 获取聊天配置
|
|
61
|
+
* 使用request,会自动添加token
|
|
62
|
+
*/
|
|
63
|
+
export declare const sendMessage: ({ url, appNo, pt, tc, msg }: {
|
|
64
|
+
url: string;
|
|
65
|
+
appNo: string;
|
|
66
|
+
pt: string;
|
|
67
|
+
tc: string;
|
|
68
|
+
msg: string;
|
|
69
|
+
}) => Promise<ApiResponse<ChatConfig>>;
|