@yimou6/common-ui 1.10.7 → 1.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/cdn/index.cdn.js +30 -17
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +28 -15
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/cdn/index.css +1 -1
  6. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs +12 -3
  7. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs.map +1 -1
  8. package/es/components/tzj-player/index.d.ts +5066 -3
  9. package/es/components/tzj-player/src/easyPlayer.vue.d.ts +104 -8
  10. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +179 -62
  11. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  12. package/es/components/tzj-player/src/tzj-player.d.ts +19 -2
  13. package/es/components/tzj-player/src/tzj-player.mjs +47 -1
  14. package/es/components/tzj-player/src/tzj-player.mjs.map +1 -1
  15. package/es/components/tzj-player/src/tzj-player.vue.d.ts +5066 -3
  16. package/es/components/tzj-player/src/tzj-player.vue2.mjs +129 -36
  17. package/es/components/tzj-player/src/tzj-player.vue2.mjs.map +1 -1
  18. package/es/components/tzj-player/src/ysPlayer.vue.d.ts +2 -2
  19. package/es/components/tzj-player/src/ysPlayer.vue2.mjs +40 -29
  20. package/es/components/tzj-player/src/ysPlayer.vue2.mjs.map +1 -1
  21. package/es/components/tzj-player/src/yunzhiyan.d.ts +6 -0
  22. package/es/components/tzj-player/src/yunzhiyan.mjs +306 -0
  23. package/es/components/tzj-player/src/yunzhiyan.mjs.map +1 -0
  24. package/es/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +1519 -0
  25. package/es/components/tzj-player/src/yunzhiyanPlayer.vue.mjs +6 -0
  26. package/es/components/tzj-player/src/yunzhiyanPlayer.vue.mjs.map +1 -0
  27. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +637 -0
  28. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -0
  29. package/es/utils/provide.d.ts +3 -3
  30. package/es/utils/provide.mjs.map +1 -1
  31. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js +12 -3
  32. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js.map +1 -1
  33. package/lib/components/tzj-player/index.d.ts +5066 -3
  34. package/lib/components/tzj-player/src/easyPlayer.vue.d.ts +104 -8
  35. package/lib/components/tzj-player/src/easyPlayer.vue2.js +177 -60
  36. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  37. package/lib/components/tzj-player/src/tzj-player.d.ts +19 -2
  38. package/lib/components/tzj-player/src/tzj-player.js +47 -0
  39. package/lib/components/tzj-player/src/tzj-player.js.map +1 -1
  40. package/lib/components/tzj-player/src/tzj-player.vue.d.ts +5066 -3
  41. package/lib/components/tzj-player/src/tzj-player.vue2.js +125 -32
  42. package/lib/components/tzj-player/src/tzj-player.vue2.js.map +1 -1
  43. package/lib/components/tzj-player/src/ysPlayer.vue.d.ts +2 -2
  44. package/lib/components/tzj-player/src/ysPlayer.vue2.js +40 -29
  45. package/lib/components/tzj-player/src/ysPlayer.vue2.js.map +1 -1
  46. package/lib/components/tzj-player/src/yunzhiyan.d.ts +6 -0
  47. package/lib/components/tzj-player/src/yunzhiyan.js +313 -0
  48. package/lib/components/tzj-player/src/yunzhiyan.js.map +1 -0
  49. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue.d.ts +1519 -0
  50. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue.js +10 -0
  51. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue.js.map +1 -0
  52. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +641 -0
  53. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -0
  54. package/lib/utils/provide.d.ts +3 -3
  55. package/lib/utils/provide.js.map +1 -1
  56. package/package.json +4 -2
  57. package/theme-default/i-tzj-player.css +1 -1
  58. package/theme-default/index.css +1 -1
@@ -0,0 +1,306 @@
1
+ import CryptoJS from 'crypto-js';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ function getAccessKey() {
6
+ if (typeof localStorage !== "undefined") {
7
+ return localStorage.getItem("YZYAK") || "04564D97CFEA44848DBF710AD51596096697";
8
+ }
9
+ return "04564D97CFEA44848DBF710AD51596096697";
10
+ }
11
+ __name(getAccessKey, "getAccessKey");
12
+ function getSecretKey() {
13
+ if (typeof localStorage !== "undefined") {
14
+ return localStorage.getItem("YZYSK") || "11925B4A833545F998519FE969EA83B36335";
15
+ }
16
+ return "11925B4A833545F998519FE969EA83B36335";
17
+ }
18
+ __name(getSecretKey, "getSecretKey");
19
+ const ACCESS_KEY = getAccessKey();
20
+ const SECRET_KEY = getSecretKey();
21
+ function sign(headers, params, sk = SECRET_KEY) {
22
+ const obj = Object.assign({}, headers, params);
23
+ const keys = Object.keys(obj).sort();
24
+ let str = "";
25
+ keys.forEach((key, index) => {
26
+ str += `${key}="${obj[key]}"`;
27
+ if (index !== keys.length - 1) {
28
+ str += "&";
29
+ }
30
+ });
31
+ const hash = CryptoJS.HmacSHA256(str, sk);
32
+ return hash.toString(CryptoJS.enc.Hex);
33
+ }
34
+ __name(sign, "sign");
35
+ async function GetYunZhiYanDeviceChannel(deviceId) {
36
+ try {
37
+ const headers = {
38
+ algorithm: "HmacSHA256",
39
+ requestTime: Date.now(),
40
+ accessKey: ACCESS_KEY
41
+ };
42
+ const params = { deviceId };
43
+ headers.sign = sign(headers, params, SECRET_KEY);
44
+ const controller = new AbortController();
45
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
46
+ const response = await fetch("/vsuap-platform-api/v1/device/queryChannel", {
47
+ method: "POST",
48
+ headers: {
49
+ "Content-Type": "application/json",
50
+ ...headers
51
+ },
52
+ body: JSON.stringify(params),
53
+ signal: controller.signal
54
+ });
55
+ clearTimeout(timeoutId);
56
+ if (!response.ok) {
57
+ console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
58
+ return false;
59
+ }
60
+ const res = await response.json();
61
+ const { code, data } = res;
62
+ if (code === 200 && Array.isArray(data) && data.length > 0 && data[0].channelCodeId) {
63
+ return data[0].channelCodeId || "";
64
+ } else {
65
+ console.error(
66
+ `\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
67
+ );
68
+ return false;
69
+ }
70
+ } catch (error) {
71
+ if (error instanceof Error) {
72
+ if (error.name === "AbortError") {
73
+ console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanDeviceChannel");
74
+ } else if (error.name === "TypeError") {
75
+ console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanDeviceChannel", error.message);
76
+ } else {
77
+ console.error(
78
+ "JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanDeviceChannel",
79
+ error.message
80
+ );
81
+ }
82
+ } else {
83
+ console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanDeviceChannel", error);
84
+ }
85
+ return false;
86
+ }
87
+ }
88
+ __name(GetYunZhiYanDeviceChannel, "GetYunZhiYanDeviceChannel");
89
+ async function GetYunZhiYanDeviceVideoUrl(deviceId, channelCodeId) {
90
+ try {
91
+ const headers = {
92
+ algorithm: "HmacSHA256",
93
+ requestTime: Date.now(),
94
+ accessKey: ACCESS_KEY
95
+ };
96
+ const params = { deviceId, channelCodeId };
97
+ headers.sign = sign(headers, params, SECRET_KEY);
98
+ const controller = new AbortController();
99
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
100
+ const response = await fetch("/vsuap-platform-api/v1/device/playOn", {
101
+ method: "POST",
102
+ headers: {
103
+ "Content-Type": "application/json",
104
+ ...headers
105
+ },
106
+ body: JSON.stringify(params),
107
+ signal: controller.signal
108
+ });
109
+ clearTimeout(timeoutId);
110
+ if (!response.ok) {
111
+ console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
112
+ return false;
113
+ }
114
+ const res = await response.json();
115
+ const { code, data } = res;
116
+ if (code === 200) {
117
+ return (data == null ? void 0 : data.flv) || "";
118
+ } else {
119
+ console.error(
120
+ `\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
121
+ );
122
+ return false;
123
+ }
124
+ } catch (error) {
125
+ if (error instanceof Error) {
126
+ if (error.name === "AbortError") {
127
+ console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanDeviceVideoUrl");
128
+ } else if (error.name === "TypeError") {
129
+ console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl", error.message);
130
+ } else {
131
+ console.error(
132
+ "JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl",
133
+ error.message
134
+ );
135
+ }
136
+ } else {
137
+ console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanDeviceVideoUrl", error);
138
+ }
139
+ return false;
140
+ }
141
+ }
142
+ __name(GetYunZhiYanDeviceVideoUrl, "GetYunZhiYanDeviceVideoUrl");
143
+ async function GetYunZhiYanOpenVoiceIntercom(deviceId) {
144
+ try {
145
+ const headers = {
146
+ algorithm: "HmacSHA256",
147
+ requestTime: Date.now(),
148
+ accessKey: ACCESS_KEY
149
+ };
150
+ const params = { deviceId, deviceType: "1", enableAudioSign: "1" };
151
+ headers.sign = sign(headers, params, SECRET_KEY);
152
+ const controller = new AbortController();
153
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
154
+ const response = await fetch("/vsuap-platform-api/v1/device/broadcastOn", {
155
+ method: "POST",
156
+ headers: {
157
+ "Content-Type": "application/json",
158
+ ...headers
159
+ },
160
+ body: JSON.stringify(params),
161
+ signal: controller.signal
162
+ });
163
+ clearTimeout(timeoutId);
164
+ if (!response.ok) {
165
+ console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
166
+ return false;
167
+ }
168
+ const res = await response.json();
169
+ const { code, data } = res;
170
+ if (code === 200) {
171
+ return data;
172
+ } else {
173
+ console.error(
174
+ `\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
175
+ );
176
+ return false;
177
+ }
178
+ } catch (error) {
179
+ if (error instanceof Error) {
180
+ if (error.name === "AbortError") {
181
+ console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanOpenVoiceIntercom");
182
+ } else if (error.name === "TypeError") {
183
+ console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanOpenVoiceIntercom", error.message);
184
+ } else {
185
+ console.error(
186
+ "JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanOpenVoiceIntercom",
187
+ error.message
188
+ );
189
+ }
190
+ } else {
191
+ console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanOpenVoiceIntercom", error);
192
+ }
193
+ return false;
194
+ }
195
+ }
196
+ __name(GetYunZhiYanOpenVoiceIntercom, "GetYunZhiYanOpenVoiceIntercom");
197
+ async function GetYunZhiYanUserPlaySecretKey(taskId) {
198
+ try {
199
+ const headers = {
200
+ algorithm: "HmacSHA256",
201
+ requestTime: Date.now(),
202
+ accessKey: ACCESS_KEY
203
+ };
204
+ const params = {};
205
+ headers.sign = sign(headers, params, SECRET_KEY);
206
+ const controller = new AbortController();
207
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
208
+ const response = await fetch(
209
+ "/vsuap-platform-api/v1/user/queryPlaySecretKey",
210
+ {
211
+ method: "POST",
212
+ headers: {
213
+ "Content-Type": "application/json",
214
+ ...headers
215
+ },
216
+ body: JSON.stringify(params),
217
+ signal: controller.signal
218
+ }
219
+ );
220
+ clearTimeout(timeoutId);
221
+ if (!response.ok) {
222
+ console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
223
+ return false;
224
+ }
225
+ const res = await response.json();
226
+ const { code, data } = res;
227
+ if (code === 200) {
228
+ const playSecretKey = data.playSecretKey;
229
+ return CryptoJS.MD5(taskId + playSecretKey).toString();
230
+ } else {
231
+ console.error(
232
+ `\u4E1A\u52A1\u9519\u8BEF: code=${code}, message=${res.message || "\u672A\u77E5\u9519\u8BEF"}`
233
+ );
234
+ return false;
235
+ }
236
+ } catch (error) {
237
+ if (error instanceof Error) {
238
+ if (error.name === "AbortError") {
239
+ console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanUserPlaySecretKey");
240
+ } else if (error.name === "TypeError") {
241
+ console.error("\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanUserPlaySecretKey", error.message);
242
+ } else {
243
+ console.error(
244
+ "JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanUserPlaySecretKey",
245
+ error.message
246
+ );
247
+ }
248
+ } else {
249
+ console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanUserPlaySecretKey", error);
250
+ }
251
+ return false;
252
+ }
253
+ }
254
+ __name(GetYunZhiYanUserPlaySecretKey, "GetYunZhiYanUserPlaySecretKey");
255
+ async function GetYunZhiYanCloseVoiceIntercom(deviceId, taskId) {
256
+ try {
257
+ const headers = {
258
+ algorithm: "HmacSHA256",
259
+ requestTime: Date.now(),
260
+ accessKey: ACCESS_KEY
261
+ };
262
+ const params = { deviceId, taskId };
263
+ headers.sign = sign(headers, params, SECRET_KEY);
264
+ const controller = new AbortController();
265
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
266
+ const response = await fetch("/vsuap-platform-api/v1/device/broadcastOff", {
267
+ method: "POST",
268
+ headers: {
269
+ "Content-Type": "application/json",
270
+ ...headers
271
+ },
272
+ body: JSON.stringify(params),
273
+ signal: controller.signal
274
+ });
275
+ clearTimeout(timeoutId);
276
+ if (!response.ok) {
277
+ console.error(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
278
+ return false;
279
+ }
280
+ const res = await response.json();
281
+ return res;
282
+ } catch (error) {
283
+ if (error instanceof Error) {
284
+ if (error.name === "AbortError") {
285
+ console.error("\u8BF7\u6C42\u8D85\u65F6: GetYunZhiYanCloseVoiceIntercom");
286
+ } else if (error.name === "TypeError") {
287
+ console.error(
288
+ "\u7F51\u7EDC\u9519\u8BEF: GetYunZhiYanCloseVoiceIntercom",
289
+ error.message
290
+ );
291
+ } else {
292
+ console.error(
293
+ "JSON\u89E3\u6790\u9519\u8BEF\u6216\u5176\u4ED6\u9519\u8BEF: GetYunZhiYanCloseVoiceIntercom",
294
+ error.message
295
+ );
296
+ }
297
+ } else {
298
+ console.error("\u672A\u77E5\u9519\u8BEF: GetYunZhiYanCloseVoiceIntercom", error);
299
+ }
300
+ return false;
301
+ }
302
+ }
303
+ __name(GetYunZhiYanCloseVoiceIntercom, "GetYunZhiYanCloseVoiceIntercom");
304
+
305
+ export { GetYunZhiYanCloseVoiceIntercom, GetYunZhiYanDeviceChannel, GetYunZhiYanDeviceVideoUrl, GetYunZhiYanOpenVoiceIntercom, GetYunZhiYanUserPlaySecretKey, sign };
306
+ //# sourceMappingURL=yunzhiyan.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yunzhiyan.mjs","sources":["../../../../../../../packages/components/tzj-player/src/yunzhiyan.ts"],"sourcesContent":["import CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"YZYAK\") || \"04564D97CFEA44848DBF710AD51596096697\"\n );\n }\n return \"04564D97CFEA44848DBF710AD51596096697\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"YZYSK\") || \"11925B4A833545F998519FE969EA83B36335\"\n );\n }\n return \"11925B4A833545F998519FE969EA83B36335\";\n}\n\nconst ACCESS_KEY = getAccessKey();\nconst SECRET_KEY = getSecretKey();\n\n/**\n * 签名函数\n * @param headers 请求头参数\n * @param params 请求参数\n * @param sk 签名密钥\n * @returns string 签名结果\n */\nexport function sign(\n headers: Record<string, string | number>,\n params: Record<string, any>,\n sk: string = SECRET_KEY,\n): string {\n const obj = Object.assign({}, headers, params);\n const keys = Object.keys(obj).sort();\n let str = \"\";\n // 拼接字符串\n keys.forEach((key, index) => {\n str += `${key}=\"${obj[key]}\"`;\n if (index !== keys.length - 1) {\n str += \"&\";\n }\n });\n // console.log(\"未加签的字符串\", str);\n // 加密\n const hash = CryptoJS.HmacSHA256(str, sk);\n // console.log(\"加签后的字符串\", hash.toString(CryptoJS.enc.Hex));\n return hash.toString(CryptoJS.enc.Hex);\n}\n/**\n * 获取云智眼设备通道ID\n * @param deviceId 设备ID\n * @returns Promise<string | false> 成功返回通道ID,失败返回false\n */\nexport async function GetYunZhiYanDeviceChannel(\n deviceId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/queryChannel\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (\n code === 200 &&\n Array.isArray(data) &&\n data.length > 0 &&\n data[0].channelCodeId\n ) {\n return data[0].channelCodeId || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceChannel\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceChannel\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceChannel\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceChannel\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取云智眼设备视频播放地址\n * @param deviceId 设备ID\n * @param channelCodeId 通道ID\n * @returns Promise<string | false> 成功返回视频播放地址,失败返回false\n */\nexport async function GetYunZhiYanDeviceVideoUrl(\n deviceId: string,\n channelCodeId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, channelCodeId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/playOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data?.flv || \"\";\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanDeviceVideoUrl\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanDeviceVideoUrl\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanDeviceVideoUrl\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanDeviceVideoUrl\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址信息\n */\n/**\n * 获取语音对讲地址信息\n * @param deviceId 设备ID\n * @returns Promise<any | false> 成功返回对讲信息,失败返回false\n */\nexport async function GetYunZhiYanOpenVoiceIntercom(\n deviceId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, deviceType: \"1\", enableAudioSign: \"1\" };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n return data;\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanOpenVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanOpenVoiceIntercom\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanOpenVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanOpenVoiceIntercom\", error);\n }\n return false;\n }\n}\n\n/**\n * 获取语音对讲地址\n * @param taskId 任务ID\n * @returns Promise<string | false> 成功返回加密后的密钥,失败返回false\n */\nexport async function GetYunZhiYanUserPlaySecretKey(\n taskId: string,\n): Promise<string | false> {\n try {\n const headers: Record<string, string | number> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = {};\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\n \"/vsuap-platform-api/v1/user/queryPlaySecretKey\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n },\n );\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n const { code, data } = res;\n\n if (code === 200) {\n const playSecretKey = data.playSecretKey;\n return CryptoJS.MD5(taskId + playSecretKey).toString();\n } else {\n console.error(\n `业务错误: code=${code}, message=${res.message || \"未知错误\"}`,\n );\n return false;\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanUserPlaySecretKey\");\n } else if (error.name === \"TypeError\") {\n console.error(\"网络错误: GetYunZhiYanUserPlaySecretKey\", error.message);\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanUserPlaySecretKey\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanUserPlaySecretKey\", error);\n }\n return false;\n }\n}\n\n/**\n * 关闭语音对讲\n * @param deviceId 设备ID\n * @param taskId 任务ID\n * @returns Promise<any | false> 成功返回响应数据,失败返回false\n */\nexport async function GetYunZhiYanCloseVoiceIntercom(\n deviceId: string,\n taskId: string,\n): Promise<any | false> {\n try {\n const headers: Record<string, any> = {\n algorithm: \"HmacSHA256\",\n requestTime: Date.now(),\n accessKey: ACCESS_KEY,\n };\n const params = { deviceId, taskId };\n headers.sign = sign(headers, params, SECRET_KEY);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10秒超时\n\n const response = await fetch(\"/vsuap-platform-api/v1/device/broadcastOff\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(params),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\n return false;\n }\n\n const res = await response.json();\n return res;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n console.error(\"请求超时: GetYunZhiYanCloseVoiceIntercom\");\n } else if (error.name === \"TypeError\") {\n console.error(\n \"网络错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n } else {\n console.error(\n \"JSON解析错误或其他错误: GetYunZhiYanCloseVoiceIntercom\",\n error.message,\n );\n }\n } else {\n console.error(\"未知错误: GetYunZhiYanCloseVoiceIntercom\", error);\n }\n return false;\n }\n}\n"],"names":[],"mappings":"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"}