pcm-agents 0.4.0 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-nFBXsN-2.js → index-CgPilf9y.js} +55 -28
- package/dist/cjs/index-CgPilf9y.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/my-component.cjs.entry.js +1 -1
- package/dist/cjs/pcm-app-chat-modal.pcm-button.pcm-card.pcm-chat-message.pcm-hr-chat-modal.pcm-htws-modal.pcm-hyzj-modal.pcm-jd-modal.pcm-jlpp-modal.pcm-mnct-modal.pcm-mnms-modal.pcm-msbg-modal.pcm-video-chat-modal.pcm-zsk-chat-modal.pcm-zygh-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pcm-app-chat-modal_15.cjs.entry.js +123 -246
- package/dist/cjs/pcm-app-chat-modal_15.cjs.entry.js.map +1 -1
- package/dist/cjs/pcm-chat-modal.cjs.entry.js +1 -1
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js +18 -27
- package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-chat-message/pcm-chat-message.css +2 -0
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js +2 -25
- package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js +14 -20
- package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js.map +1 -1
- package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js +14 -20
- package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js.map +1 -1
- package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js +14 -20
- package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js.map +1 -1
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js +14 -20
- package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js.map +1 -1
- package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js +14 -20
- package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js.map +1 -1
- package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js +14 -20
- package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js.map +1 -1
- package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js +14 -20
- package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js.map +1 -1
- package/dist/collection/components/pcm-video-chat-modal/pcm-video-chat-modal.js +2 -25
- package/dist/collection/components/pcm-video-chat-modal/pcm-video-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js +11 -19
- package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js +2 -20
- package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js.map +1 -1
- package/dist/collection/utils/utils.js +52 -0
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/index.js +53 -25
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-CvhE1OvU.js → p-CU5wR9xG.js} +3 -3
- package/dist/components/{p-CvhE1OvU.js.map → p-CU5wR9xG.js.map} +1 -1
- package/dist/components/{p-m8l1Utvn.js → p-CpOTUtX0.js} +21 -30
- package/dist/components/p-CpOTUtX0.js.map +1 -0
- package/dist/components/pcm-app-chat-modal.js +1 -1
- package/dist/components/pcm-chat-message.js +1 -1
- package/dist/components/pcm-chat-modal.js +1 -1
- package/dist/components/pcm-hr-chat-modal.js +3 -26
- package/dist/components/pcm-hr-chat-modal.js.map +1 -1
- package/dist/components/pcm-htws-modal.js +16 -22
- package/dist/components/pcm-htws-modal.js.map +1 -1
- package/dist/components/pcm-hyzj-modal.js +16 -22
- package/dist/components/pcm-hyzj-modal.js.map +1 -1
- package/dist/components/pcm-jd-modal.js +16 -22
- package/dist/components/pcm-jd-modal.js.map +1 -1
- package/dist/components/pcm-jlpp-modal.js +16 -22
- package/dist/components/pcm-jlpp-modal.js.map +1 -1
- package/dist/components/pcm-mnct-modal.js +16 -22
- package/dist/components/pcm-mnct-modal.js.map +1 -1
- package/dist/components/pcm-mnms-modal.js +16 -22
- package/dist/components/pcm-mnms-modal.js.map +1 -1
- package/dist/components/pcm-msbg-modal.js +16 -22
- package/dist/components/pcm-msbg-modal.js.map +1 -1
- package/dist/components/pcm-video-chat-modal.js +3 -26
- package/dist/components/pcm-video-chat-modal.js.map +1 -1
- package/dist/components/pcm-zsk-chat-modal.js +12 -20
- package/dist/components/pcm-zsk-chat-modal.js.map +1 -1
- package/dist/components/pcm-zygh-modal.js +4 -22
- package/dist/components/pcm-zygh-modal.js.map +1 -1
- package/dist/esm/{index-0MneiuDC.js → index-DG9KUs-N.js} +55 -27
- package/dist/esm/index-DG9KUs-N.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/my-component.entry.js +1 -1
- package/dist/esm/pcm-app-chat-modal.pcm-button.pcm-card.pcm-chat-message.pcm-hr-chat-modal.pcm-htws-modal.pcm-hyzj-modal.pcm-jd-modal.pcm-jlpp-modal.pcm-mnct-modal.pcm-mnms-modal.pcm-msbg-modal.pcm-video-chat-modal.pcm-zsk-chat-modal.pcm-zygh-modal.entry.js.map +1 -1
- package/dist/esm/pcm-app-chat-modal_15.entry.js +123 -246
- package/dist/esm/pcm-app-chat-modal_15.entry.js.map +1 -1
- package/dist/esm/pcm-chat-modal.entry.js +1 -1
- package/dist/pcm-agents/index.esm.js +1 -1
- package/dist/pcm-agents/p-1d8aa610.entry.js +2 -0
- package/dist/pcm-agents/p-1d8aa610.entry.js.map +1 -0
- package/dist/pcm-agents/{p-d5a07e2a.entry.js → p-7b826826.entry.js} +2 -2
- package/dist/pcm-agents/p-DG9KUs-N.js +2 -0
- package/dist/pcm-agents/p-DG9KUs-N.js.map +1 -0
- package/dist/pcm-agents/p-c6ae7ebf.entry.js +2 -0
- package/dist/pcm-agents/pcm-agents.esm.js +1 -1
- package/dist/pcm-agents/pcm-app-chat-modal.pcm-button.pcm-card.pcm-chat-message.pcm-hr-chat-modal.pcm-htws-modal.pcm-hyzj-modal.pcm-jd-modal.pcm-jlpp-modal.pcm-mnct-modal.pcm-mnms-modal.pcm-msbg-modal.pcm-video-chat-modal.pcm-zsk-chat-modal.pcm-zygh-modal.entry.esm.js.map +1 -1
- package/dist/types/components/pcm-app-chat-modal/pcm-app-chat-modal.d.ts +0 -1
- package/dist/types/components/pcm-hr-chat-modal/pcm-hr-chat-modal.d.ts +0 -1
- package/dist/types/components/pcm-htws-modal/pcm-htws-modal.d.ts +3 -4
- package/dist/types/components/pcm-hyzj-modal/pcm-hyzj-modal.d.ts +3 -4
- package/dist/types/components/pcm-jd-modal/pcm-jd-modal.d.ts +3 -4
- package/dist/types/components/pcm-jlpp-modal/pcm-jlpp-modal.d.ts +3 -4
- package/dist/types/components/pcm-mnct-modal/pcm-mnct-modal.d.ts +3 -4
- package/dist/types/components/pcm-mnms-modal/pcm-mnms-modal.d.ts +3 -4
- package/dist/types/components/pcm-msbg-modal/pcm-msbg-modal.d.ts +3 -4
- package/dist/types/components/pcm-video-chat-modal/pcm-video-chat-modal.d.ts +0 -1
- package/dist/types/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.d.ts +2 -4
- package/dist/types/components/pcm-zygh-modal/pcm-zygh-modal.d.ts +0 -4
- package/dist/types/utils/utils.d.ts +8 -0
- package/package.json +1 -1
- package/dist/cjs/index-nFBXsN-2.js.map +0 -1
- package/dist/components/p-m8l1Utvn.js.map +0 -1
- package/dist/esm/index-0MneiuDC.js.map +0 -1
- package/dist/pcm-agents/p-0MneiuDC.js +0 -2
- package/dist/pcm-agents/p-0MneiuDC.js.map +0 -1
- package/dist/pcm-agents/p-7995f7c1.entry.js +0 -2
- package/dist/pcm-agents/p-7995f7c1.entry.js.map +0 -1
- package/dist/pcm-agents/p-8664098f.entry.js +0 -2
- /package/dist/pcm-agents/{p-d5a07e2a.entry.js.map → p-7b826826.entry.js.map} +0 -0
- /package/dist/pcm-agents/{p-8664098f.entry.js.map → p-c6ae7ebf.entry.js.map} +0 -0
|
@@ -27,6 +27,11 @@ const sendSSERequest = async (config) => {
|
|
|
27
27
|
},
|
|
28
28
|
body: data ? JSON.stringify(data) : undefined
|
|
29
29
|
});
|
|
30
|
+
// 检查是否为401错误(未授权)
|
|
31
|
+
if (response.status === 401) {
|
|
32
|
+
// 触发全局token无效事件
|
|
33
|
+
createTokenInvalidEvent();
|
|
34
|
+
}
|
|
30
35
|
if (!response.ok) {
|
|
31
36
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
32
37
|
}
|
|
@@ -65,6 +70,15 @@ const sendSSERequest = async (config) => {
|
|
|
65
70
|
onError?.(error);
|
|
66
71
|
}
|
|
67
72
|
};
|
|
73
|
+
// 添加一个全局事件发射器用于处理401错误
|
|
74
|
+
const createTokenInvalidEvent = () => {
|
|
75
|
+
const event = new CustomEvent('pcm-token-invalid', {
|
|
76
|
+
bubbles: true,
|
|
77
|
+
composed: true,
|
|
78
|
+
detail: { timestamp: new Date().getTime() }
|
|
79
|
+
});
|
|
80
|
+
document.dispatchEvent(event);
|
|
81
|
+
};
|
|
68
82
|
/**
|
|
69
83
|
* 发送HTTP请求
|
|
70
84
|
* @param config 请求配置
|
|
@@ -110,6 +124,11 @@ const sendHttpRequest = async (config) => {
|
|
|
110
124
|
requestUrl += (queryParams.toString() ? '&' : '?') + dataParams.toString();
|
|
111
125
|
}
|
|
112
126
|
const response = await fetch(requestUrl, requestConfig);
|
|
127
|
+
// 检查是否为401错误(未授权)
|
|
128
|
+
if (response.status === 401) {
|
|
129
|
+
// 触发全局token无效事件
|
|
130
|
+
createTokenInvalidEvent();
|
|
131
|
+
}
|
|
113
132
|
const responseData = await response.json();
|
|
114
133
|
// 调用 onMessage 回调
|
|
115
134
|
if (onMessage) {
|
|
@@ -156,30 +175,6 @@ const sendHttpRequest = async (config) => {
|
|
|
156
175
|
}
|
|
157
176
|
}
|
|
158
177
|
};
|
|
159
|
-
/**
|
|
160
|
-
* 验证API密钥
|
|
161
|
-
* @param token API密钥
|
|
162
|
-
* @returns Promise<boolean> 验证是否成功
|
|
163
|
-
*/
|
|
164
|
-
const verifyApiKey = async (token) => {
|
|
165
|
-
if (!token) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
try {
|
|
169
|
-
const response = await sendHttpRequest({
|
|
170
|
-
url: '/sdk/v1/user',
|
|
171
|
-
method: 'GET',
|
|
172
|
-
headers: {
|
|
173
|
-
'Authorization': `Bearer ${token}`
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
return response.success;
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
console.error('API密钥验证错误:', error);
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
178
|
/**
|
|
184
179
|
* 获取智能体信息
|
|
185
180
|
* @param token API密钥
|
|
@@ -245,14 +240,46 @@ const uploadFileToBackend = async (file, headers, params) => {
|
|
|
245
240
|
throw error;
|
|
246
241
|
}
|
|
247
242
|
};
|
|
243
|
+
/**
|
|
244
|
+
* 合成语音音频
|
|
245
|
+
* @param text 要转换为语音的文本
|
|
246
|
+
* @param token API密钥
|
|
247
|
+
* @returns Promise<string> 返回音频的Blob URL
|
|
248
|
+
*/
|
|
249
|
+
const synthesizeAudio = async (text, token) => {
|
|
250
|
+
try {
|
|
251
|
+
const response = await fetch(`${API_DOMAIN}/sdk/v1/tts/synthesize_audio`, {
|
|
252
|
+
method: 'POST',
|
|
253
|
+
headers: {
|
|
254
|
+
'Content-Type': 'application/json',
|
|
255
|
+
'authorization': 'Bearer ' + token
|
|
256
|
+
},
|
|
257
|
+
body: JSON.stringify({ text })
|
|
258
|
+
});
|
|
259
|
+
// 检查是否为401错误(未授权)
|
|
260
|
+
if (response.status === 401) {
|
|
261
|
+
// 触发全局token无效事件
|
|
262
|
+
createTokenInvalidEvent();
|
|
263
|
+
}
|
|
264
|
+
if (!response.ok) {
|
|
265
|
+
throw new Error('语音合成失败');
|
|
266
|
+
}
|
|
267
|
+
// 获取音频数据并创建Blob URL
|
|
268
|
+
const audioBlob = await response.blob();
|
|
269
|
+
return URL.createObjectURL(audioBlob);
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
console.error('语音合成错误:', error);
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
};
|
|
248
276
|
|
|
249
|
-
exports.API_DOMAIN = API_DOMAIN;
|
|
250
277
|
exports.fetchAgentInfo = fetchAgentInfo;
|
|
251
278
|
exports.format = format;
|
|
252
279
|
exports.sendHttpRequest = sendHttpRequest;
|
|
253
280
|
exports.sendSSERequest = sendSSERequest;
|
|
281
|
+
exports.synthesizeAudio = synthesizeAudio;
|
|
254
282
|
exports.uploadFileToBackend = uploadFileToBackend;
|
|
255
|
-
|
|
256
|
-
//# sourceMappingURL=index-nFBXsN-2.js.map
|
|
283
|
+
//# sourceMappingURL=index-CgPilf9y.js.map
|
|
257
284
|
|
|
258
|
-
//# sourceMappingURL=index-
|
|
285
|
+
//# sourceMappingURL=index-CgPilf9y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CgPilf9y.js","sources":["src/utils/env.ts","src/utils/utils.ts"],"sourcesContent":["// 默认 API 域名\r\nconst DEFAULT_API_DOMAIN = 'https://api.pincaimao.com/agents/platform';\r\n\r\n// 从环境变量获取 API 域名,如果未设置则使用默认值\r\nexport const API_DOMAIN = process.env.API_DOMAIN || DEFAULT_API_DOMAIN;\r\n\r\n// 导出其他环境变量\r\nexport const ENV = {\r\n API_DOMAIN,\r\n // 可以添加其他环境变量\r\n}; ","// 导入环境变量\r\nimport { API_DOMAIN } from './env';\r\n\r\nexport { API_DOMAIN };\r\n\r\nexport function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n}\r\n\r\n// 添加类型定义\r\nexport interface UserInputMessageType {\r\n message: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface WorkFlowNode {\r\n message_id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n event?: string;\r\n answer?: string;\r\n data?: {\r\n outputs?: {\r\n answer?: string;\r\n };\r\n status?: string;\r\n error?: any;\r\n };\r\n}\r\n\r\nexport interface MessageRound extends UserInputMessageType {\r\n id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n answer?: string;\r\n status?: string;\r\n error?: any;\r\n}\r\n\r\n/**\r\n * 将工作流节点转换为消息轮次\r\n * @param message_event 消息事件类型\r\n * @param inputMessage 用户输入消息\r\n * @param streamNode 工作流节点\r\n * @returns 消息轮次\r\n */\r\nexport const convertWorkflowStreamNodeToMessageRound = (\r\n message_event: string,\r\n inputMessage: UserInputMessageType,\r\n streamNode: WorkFlowNode,\r\n): MessageRound => {\r\n const messageRound: MessageRound = {\r\n ...inputMessage,\r\n };\r\n if (message_event === 'workflow_finished') messageRound.answer = streamNode.data?.outputs?.answer;\r\n if (message_event === 'agent_message' || message_event === 'message') messageRound.answer = streamNode?.answer;\r\n messageRound.id = streamNode.message_id;\r\n messageRound.conversation_id = streamNode.conversation_id;\r\n messageRound.created_at = streamNode.created_at;\r\n messageRound.status = streamNode.data?.status;\r\n messageRound.error = streamNode.data?.error;\r\n return messageRound;\r\n};\r\n\r\n/**\r\n * SSE 流式请求配置接口\r\n */\r\nexport interface SSERequestConfig {\r\n url: string;\r\n method: string;\r\n headers?: Record<string, string>;\r\n data?: any;\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 发送 SSE 流式请求\r\n * @param config 请求配置\r\n * @returns Promise<void>\r\n */\r\nexport const sendSSERequest = async (config: SSERequestConfig): Promise<void> => {\r\n const { url, method, headers = {}, data, onMessage, onError, onComplete } = config;\r\n \r\n try {\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n const requestUrl = `${API_DOMAIN}${url}`;\r\n \r\n const response = await fetch(requestUrl, {\r\n method,\r\n headers: {\r\n 'Accept': 'text/event-stream',\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n body: data ? JSON.stringify(data) : undefined\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n if (!reader) throw new Error('No reader available');\r\n \r\n const decoder = new TextDecoder();\r\n let buffer = '';\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n // 处理缓冲区中的完整消息\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || ''; // 保留最后一个不完整的行\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data:')) {\r\n try {\r\n const jsonStr = line.substring(5).trim();\r\n if (!jsonStr) continue;\r\n \r\n const data = JSON.parse(jsonStr);\r\n onMessage?.(data);\r\n } catch (e) {\r\n console.error('解析 SSE 数据错误:', e, '原始数据:', line);\r\n }\r\n }\r\n }\r\n }\r\n \r\n onComplete?.();\r\n } catch (error) {\r\n console.error('SSE 请求错误:', error);\r\n onError?.(error);\r\n }\r\n};\r\n\r\n/**\r\n * HTTP请求配置接口\r\n */\r\nexport interface HttpRequestConfig {\r\n url: string;\r\n method?: string;\r\n headers?: Record<string, string>;\r\n params?: Record<string, any>;\r\n data?: any;\r\n formData?: FormData; // 添加FormData支持\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 统一的API响应接口\r\n */\r\nexport interface ApiResponse<T = any> {\r\n code: number;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * HTTP响应接口\r\n */\r\nexport interface HttpResponse<T = any> {\r\n success: boolean;\r\n data?: T;\r\n error?: any;\r\n message?: string;\r\n}\r\n\r\n// 添加一个全局事件发射器用于处理401错误\r\nexport const createTokenInvalidEvent = () => {\r\n const event = new CustomEvent('pcm-token-invalid', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { timestamp: new Date().getTime() }\r\n });\r\n document.dispatchEvent(event);\r\n};\r\n\r\n/**\r\n * 发送HTTP请求\r\n * @param config 请求配置\r\n * @returns Promise<HttpResponse>\r\n */\r\nexport const sendHttpRequest = async <T = any>(config: HttpRequestConfig): Promise<HttpResponse<T>> => {\r\n const { url, method = 'GET', headers = {}, params = {}, data, formData, onMessage } = config;\r\n \r\n try {\r\n // 构建URL和查询参数\r\n const queryParams = new URLSearchParams();\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n \r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n let requestUrl = `${API_DOMAIN}${url}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n \r\n // 创建请求配置对象\r\n const requestConfig: RequestInit = {\r\n method,\r\n headers: formData ? { ...headers } : {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n }\r\n };\r\n\r\n // 处理请求体\r\n if (formData) {\r\n // 如果提供了FormData,直接使用\r\n requestConfig.body = formData;\r\n } else if (method !== 'GET' && method !== 'HEAD' && data) {\r\n // 否则,如果是非GET/HEAD请求且有data,将其JSON序列化\r\n requestConfig.body = JSON.stringify(data);\r\n }\r\n\r\n // 如果是 GET 方法且有 data,将其作为查询参数添加到 URL\r\n if (method === 'GET' && data) {\r\n const dataParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n dataParams.append(key, String(value));\r\n }\r\n });\r\n requestUrl += (queryParams.toString() ? '&' : '?') + dataParams.toString();\r\n }\r\n\r\n const response = await fetch(requestUrl, requestConfig);\r\n \r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n }\r\n \r\n const responseData: ApiResponse<T> = await response.json();\r\n \r\n // 调用 onMessage 回调\r\n if (onMessage) {\r\n onMessage(responseData);\r\n }\r\n \r\n // 检查响应状态\r\n if (!response.ok) {\r\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\r\n return {\r\n success: false,\r\n message: responseData.message || `HTTP错误: ${response.status}`,\r\n error: responseData\r\n };\r\n }\r\n \r\n // 检查业务状态码\r\n if (responseData.code !== 0) {\r\n console.error(`API错误: ${responseData.message}`);\r\n return {\r\n success: false,\r\n message: responseData.message,\r\n error: responseData\r\n };\r\n }\r\n \r\n // 直接返回data\r\n return {\r\n success: true,\r\n data: responseData.data\r\n };\r\n } catch (error) {\r\n console.error('HTTP请求错误:', error);\r\n if (config.onError) {\r\n config.onError(error);\r\n }\r\n return {\r\n success: false,\r\n error,\r\n message: error instanceof Error ? error.message : '未知错误'\r\n };\r\n } finally {\r\n if (config.onComplete) {\r\n config.onComplete();\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * 验证API密钥\r\n * @param token API密钥\r\n * @returns Promise<boolean> 验证是否成功\r\n */\r\nexport const verifyApiKey = async (token: string): Promise<boolean> => {\r\n if (!token) {\r\n return false;\r\n }\r\n \r\n try {\r\n const response = await sendHttpRequest({\r\n url: '/sdk/v1/user',\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n }\r\n });\r\n\r\n return response.success;\r\n } catch (error) {\r\n console.error('API密钥验证错误:', error);\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 获取智能体信息\r\n * @param token API密钥\r\n * @param botId 智能体ID\r\n * @returns Promise<any> 智能体信息数据\r\n */\r\nexport const fetchAgentInfo = async (token: string, botId: string): Promise<any> => {\r\n if (!token || !botId) {\r\n throw new Error('API密钥和智能体ID不能为空');\r\n }\r\n \r\n try {\r\n const response = await sendHttpRequest({\r\n url: `/sdk/v1/agent/${botId}/info`,\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${token}`\r\n }\r\n });\r\n\r\n if (!response.success) {\r\n throw new Error(response.message || '获取智能体信息失败');\r\n }\r\n \r\n return response.data;\r\n } catch (error) {\r\n console.error('获取智能体信息失败:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 文件上传响应数据接口\r\n */\r\nexport interface FileUploadResponse {\r\n /** 文件在对象存储中的唯一标识符 */\r\n cos_key: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n /** 文件大小(带单位的字符串,如 \"1.5MB\") */\r\n file_size: string;\r\n /** 文件的预签名URL */\r\n presigned_url: string;\r\n /** 文件扩展名 */\r\n ext: string;\r\n}\r\n\r\n/**\r\n * 通过后端API上传文件\r\n * @param file 要上传的文件\r\n * @param params 可选的额外参数\r\n * @param headers 可选的请求头\r\n * @returns Promise 包含上传结果\r\n */\r\nexport const uploadFileToBackend = async (\r\n file: File,\r\n headers?: Record<string, string>,\r\n params?: Record<string, any>\r\n): Promise<FileUploadResponse> => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n \r\n // 添加额外参数到 formData\r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n formData.append(key, String(value));\r\n }\r\n });\r\n }\r\n \r\n try {\r\n const response = await sendHttpRequest<{cos_key: string, file_name: string, file_size: string, presigned_url: string, ext: string}>({\r\n url: '/sdk/v1/files/upload',\r\n method: 'POST',\r\n headers: {\r\n ...headers\r\n },\r\n formData\r\n });\r\n \r\n if (!response.success || !response.data) {\r\n throw new Error(response.message || '文件上传失败');\r\n }\r\n \r\n return response.data;\r\n } catch (error) {\r\n console.error('文件上传错误:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 合成语音音频\r\n * @param text 要转换为语音的文本\r\n * @param token API密钥\r\n * @returns Promise<string> 返回音频的Blob URL\r\n */\r\nexport const synthesizeAudio = async (text: string, token: string): Promise<string> => {\r\n try {\r\n const response = await fetch(`${API_DOMAIN}/sdk/v1/tts/synthesize_audio`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'authorization': 'Bearer ' + token\r\n },\r\n body: JSON.stringify({ text })\r\n });\r\n\r\n // 检查是否为401错误(未授权)\r\n if (response.status === 401) {\r\n // 触发全局token无效事件\r\n createTokenInvalidEvent();\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error('语音合成失败');\r\n }\r\n\r\n // 获取音频数据并创建Blob URL\r\n const audioBlob = await response.blob();\r\n return URL.createObjectURL(audioBlob);\r\n } catch (error) {\r\n console.error('语音合成错误:', error);\r\n throw error;\r\n }\r\n};\r\n"],"names":[],"mappings":";;AAAA;AAGA;AACO,MAAM,UAAU,GAAG,2CAA4C;;ACJtE;SAKgB,MAAM,CAAC,KAAc,EAAE,MAAe,EAAE,IAAa,EAAA;AACnE,IAAA,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,GAAG,CAAI,CAAA,EAAA,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,GAAG,CAAI,CAAA,EAAA,IAAI,EAAE,GAAG,EAAE,CAAC;AAChF;AAsEA;;;;AAIG;MACU,cAAc,GAAG,OAAO,MAAwB,KAAmB;AAC9E,IAAA,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;AAElF,IAAA,IAAI;;AAEF,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,UAAU,CAAG,EAAA,GAAG,EAAE;AAExC,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YACvC,MAAM;AACN,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,GAAG;AACJ,aAAA;AACD,YAAA,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;AACrC,SAAA,CAAC;;AAGF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;;AAE3B,YAAA,uBAAuB,EAAE;;AAG3B,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAE,CAAA,CAAC;;QAG3D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE;AACzC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AAEnD,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;QACjC,IAAI,MAAM,GAAG,EAAE;QAEf,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI;gBAAE;AAEV,YAAA,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;YAGjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAE3B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC5B,oBAAA,IAAI;wBACF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACxC,wBAAA,IAAI,CAAC,OAAO;4BAAE;wBAEd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAChC,wBAAA,SAAS,GAAG,IAAI,CAAC;;oBACjB,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC;;;;;QAMvD,UAAU,IAAI;;IACd,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;AACjC,QAAA,OAAO,GAAG,KAAK,CAAC;;AAEpB;AAoCA;AACO,MAAM,uBAAuB,GAAG,MAAK;AAC1C,IAAA,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,mBAAmB,EAAE;AACjD,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC1C,KAAA,CAAC;AACF,IAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED;;;;AAIG;MACU,eAAe,GAAG,OAAgB,MAAyB,KAA8B;IACpG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM;AAE5F,IAAA,IAAI;;AAEF,QAAA,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE;AACzC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;AAE1C,SAAC,CAAC;;QAGF,IAAI,UAAU,GAAG,CAAA,EAAG,UAAU,CAAA,EAAG,GAAG,CAAG,EAAA,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAA,GAAG,EAAE,CAAA,CAAE;;AAGnG,QAAA,MAAM,aAAa,GAAgB;YACjC,MAAM;YACN,OAAO,EAAE,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG;AACnC,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,GAAG;AACJ;SACF;;QAGD,IAAI,QAAQ,EAAE;;AAEZ,YAAA,aAAa,CAAC,IAAI,GAAG,QAAQ;;aACxB,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,EAAE;;YAExD,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;AAI3C,QAAA,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,EAAE;AAC5B,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;oBACzC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEzC,aAAC,CAAC;YACF,UAAU,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE;;QAG5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC;;AAGvD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;;AAE3B,YAAA,uBAAuB,EAAE;;AAG3B,QAAA,MAAM,YAAY,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAAE;;QAG1D,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,YAAY,CAAC;;;AAIzB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,QAAA,EAAW,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;YAClE,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,CAAW,QAAA,EAAA,QAAQ,CAAC,MAAM,CAAE,CAAA;AAC7D,gBAAA,KAAK,EAAE;aACR;;;AAIH,QAAA,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,CAAA,OAAA,EAAU,YAAY,CAAC,OAAO,CAAE,CAAA,CAAC;YAC/C,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,YAAY,CAAC,OAAO;AAC7B,gBAAA,KAAK,EAAE;aACR;;;QAIH,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,YAAY,CAAC;SACpB;;IACD,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;AACjC,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;;QAEvB,OAAO;AACL,YAAA,OAAO,EAAE,KAAK;YACd,KAAK;AACL,YAAA,OAAO,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG;SACnD;;YACO;AACR,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,MAAM,CAAC,UAAU,EAAE;;;AAGzB;AA4BA;;;;;AAKG;AACU,MAAA,cAAc,GAAG,OAAO,KAAa,EAAE,KAAa,KAAkB;AACjF,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;;AAGpC,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;YACrC,GAAG,EAAE,CAAiB,cAAA,EAAA,KAAK,CAAO,KAAA,CAAA;AAClC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE;gBACP,eAAe,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE;AACnC;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,WAAW,CAAC;;QAGlD,OAAO,QAAQ,CAAC,IAAI;;IACpB,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC;AAClC,QAAA,MAAM,KAAK;;AAEf;AAkBA;;;;;;AAMG;AACI,MAAM,mBAAmB,GAAG,OACjC,IAAU,EACV,OAAgC,EAChC,MAA4B,KACG;AAC/B,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,IAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;;IAG7B,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEvC,SAAC,CAAC;;AAGJ,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,eAAe,CAA8F;AAClI,YAAA,GAAG,EAAE,sBAAsB;AAC3B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE;AACP,gBAAA,GAAG;AACJ,aAAA;YACD;AACD,SAAA,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC;;QAG/C,OAAO,QAAQ,CAAC,IAAI;;IACpB,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAC/B,QAAA,MAAM,KAAK;;AAEf;AAEA;;;;;AAKG;AACU,MAAA,eAAe,GAAG,OAAO,IAAY,EAAE,KAAa,KAAqB;AACpF,IAAA,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAG,EAAA,UAAU,8BAA8B,EAAE;AACxE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,SAAS,GAAG;AAC9B,aAAA;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE;AAC9B,SAAA,CAAC;;AAGF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;;AAE3B,YAAA,uBAAuB,EAAE;;AAG3B,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;;;AAI3B,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AACvC,QAAA,OAAO,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;;IACrC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AAC/B,QAAA,MAAM,KAAK;;AAEf;;;;;;;;;"}
|
package/dist/cjs/index.cjs.js
CHANGED