@ray-js/robot-data-stream 0.0.14 → 0.0.15-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/lib/mqtt/createCommonOptions.d.ts +4 -2
  2. package/lib/mqtt/createCommonOptions.js +10 -5
  3. package/lib/mqtt/hooks/useStructuredMessage.d.ts +14 -0
  4. package/lib/mqtt/hooks/useStructuredMessage.js +131 -0
  5. package/lib/mqtt/mqttProvider.d.ts +19 -1
  6. package/lib/mqtt/mqttProvider.js +69 -8
  7. package/lib/mqtt/promise.d.ts +57 -4
  8. package/lib/mqtt/promise.js +115 -36
  9. package/lib/mqtt/type/fun.d.ts +49 -0
  10. package/lib/mqtt/type/fun.js +145 -0
  11. package/lib/mqtt/type/index.d.ts +0 -7
  12. package/lib/mqtt/type/index.js +0 -1
  13. package/lib/mqtt/type/protocols/base.d.ts +5 -0
  14. package/lib/mqtt/type/protocols/base.js +32 -0
  15. package/lib/mqtt/type/protocols/carpetCleanProtocol.d.ts +8 -0
  16. package/lib/mqtt/type/protocols/carpetCleanProtocol.js +16 -0
  17. package/lib/mqtt/type/protocols/carpetProtocol.d.ts +41 -0
  18. package/lib/mqtt/type/protocols/carpetProtocol.js +202 -0
  19. package/lib/mqtt/type/protocols/devInfoProtocol.d.ts +5 -0
  20. package/lib/mqtt/type/protocols/devInfoProtocol.js +12 -0
  21. package/lib/mqtt/type/protocols/deviceModelProtocol.d.ts +8 -0
  22. package/lib/mqtt/type/protocols/deviceModelProtocol.js +34 -0
  23. package/lib/mqtt/type/protocols/furnitureModelProtocol.d.ts +10 -0
  24. package/lib/mqtt/type/protocols/furnitureModelProtocol.js +35 -0
  25. package/lib/mqtt/type/protocols/historyMapProtocol.d.ts +17 -0
  26. package/lib/mqtt/type/protocols/historyMapProtocol.js +37 -0
  27. package/lib/mqtt/type/protocols/index.d.ts +20 -0
  28. package/lib/mqtt/type/protocols/index.js +20 -0
  29. package/lib/mqtt/type/protocols/partDivisionProtocol.d.ts +8 -0
  30. package/lib/mqtt/type/protocols/partDivisionProtocol.js +12 -0
  31. package/lib/mqtt/type/protocols/partMergeProtocol.d.ts +7 -0
  32. package/lib/mqtt/type/protocols/partMergeProtocol.js +12 -0
  33. package/lib/mqtt/type/protocols/passwordProtocol.d.ts +11 -0
  34. package/lib/mqtt/type/protocols/passwordProtocol.js +25 -0
  35. package/lib/mqtt/type/protocols/quietHoursProtocol.d.ts +8 -0
  36. package/lib/mqtt/type/protocols/quietHoursProtocol.js +35 -0
  37. package/lib/mqtt/type/protocols/resetMapProtocol.d.ts +4 -0
  38. package/lib/mqtt/type/protocols/resetMapProtocol.js +1 -0
  39. package/lib/mqtt/type/protocols/roomPropertyProtocol.d.ts +14 -0
  40. package/lib/mqtt/type/protocols/roomPropertyProtocol.js +113 -0
  41. package/lib/mqtt/type/protocols/scheduleProtocol.d.ts +18 -0
  42. package/lib/mqtt/type/protocols/scheduleProtocol.js +100 -0
  43. package/lib/mqtt/type/protocols/selectRoomCleanProtocol.d.ts +8 -0
  44. package/lib/mqtt/type/protocols/selectRoomCleanProtocol.js +40 -0
  45. package/lib/mqtt/type/protocols/spotCleanProtocol.d.ts +9 -0
  46. package/lib/mqtt/type/protocols/spotCleanProtocol.js +72 -0
  47. package/lib/mqtt/type/protocols/virtualAreaProtocol.d.ts +8 -0
  48. package/lib/mqtt/type/protocols/virtualAreaProtocol.js +36 -0
  49. package/lib/mqtt/type/protocols/virtualWallProtocol.d.ts +8 -0
  50. package/lib/mqtt/type/protocols/virtualWallProtocol.js +25 -0
  51. package/lib/mqtt/type/protocols/voiceProtocol.d.ts +8 -0
  52. package/lib/mqtt/type/protocols/voiceProtocol.js +23 -0
  53. package/lib/mqtt/type/protocols/wifiMapProtocol.d.ts +8 -0
  54. package/lib/mqtt/type/protocols/wifiMapProtocol.js +14 -0
  55. package/lib/mqtt/type/protocols/zoneCleanProtocol.d.ts +8 -0
  56. package/lib/mqtt/type/protocols/zoneCleanProtocol.js +49 -0
  57. package/lib/mqtt/useCarpet.d.ts +7 -67
  58. package/lib/mqtt/useCarpet.js +101 -181
  59. package/lib/mqtt/useCarpetClean.d.ts +2 -11
  60. package/lib/mqtt/useCarpetClean.js +24 -51
  61. package/lib/mqtt/useDevInfo.d.ts +8 -6
  62. package/lib/mqtt/useDevInfo.js +44 -36
  63. package/lib/mqtt/useDeviceModel.d.ts +6 -19
  64. package/lib/mqtt/useDeviceModel.js +29 -42
  65. package/lib/mqtt/useFurnitureModel.d.ts +6 -18
  66. package/lib/mqtt/useFurnitureModel.js +29 -43
  67. package/lib/mqtt/useHistoryMap.d.ts +2 -18
  68. package/lib/mqtt/useHistoryMap.js +102 -119
  69. package/lib/mqtt/usePartDivision.d.ts +2 -9
  70. package/lib/mqtt/usePartDivision.js +48 -57
  71. package/lib/mqtt/usePartMerge.d.ts +2 -8
  72. package/lib/mqtt/usePartMerge.js +34 -49
  73. package/lib/mqtt/usePassword.d.ts +6 -13
  74. package/lib/mqtt/usePassword.js +84 -74
  75. package/lib/mqtt/useQuiteHours.d.ts +4 -37
  76. package/lib/mqtt/useQuiteHours.js +66 -100
  77. package/lib/mqtt/useResetMap.d.ts +2 -8
  78. package/lib/mqtt/useResetMap.js +27 -34
  79. package/lib/mqtt/useRoomProperty.d.ts +8 -9
  80. package/lib/mqtt/useRoomProperty.js +67 -65
  81. package/lib/mqtt/useSchedule.d.ts +3 -23
  82. package/lib/mqtt/useSchedule.js +72 -101
  83. package/lib/mqtt/useSelectRoomClean.d.ts +3 -24
  84. package/lib/mqtt/useSelectRoomClean.js +107 -133
  85. package/lib/mqtt/useSpotClean.d.ts +5 -15
  86. package/lib/mqtt/useSpotClean.js +68 -121
  87. package/lib/mqtt/useVirtualArea.d.ts +6 -17
  88. package/lib/mqtt/useVirtualArea.js +109 -119
  89. package/lib/mqtt/useVirtualWall.d.ts +2 -18
  90. package/lib/mqtt/useVirtualWall.js +69 -90
  91. package/lib/mqtt/useVoice.d.ts +2 -16
  92. package/lib/mqtt/useVoice.js +48 -68
  93. package/lib/mqtt/useWifiMap.d.ts +6 -5
  94. package/lib/mqtt/useWifiMap.js +43 -42
  95. package/lib/mqtt/useZoneClean.d.ts +2 -21
  96. package/lib/mqtt/useZoneClean.js +125 -137
  97. package/lib/myLib/zod/mini/index.d.cts +1 -0
  98. package/lib/myLib/zod/mini/index.d.ts +1 -0
  99. package/lib/myLib/zod/mini/index.js +1 -0
  100. package/lib/myLib/zod/mini/package.json +6 -0
  101. package/lib/myLib/zod/src/mini/index.d.ts +1 -0
  102. package/lib/myLib/zod/src/mini/index.js +1 -0
  103. package/lib/myLib/zod/src/v4/core/api.d.ts +306 -0
  104. package/lib/myLib/zod/src/v4/core/api.js +1256 -0
  105. package/lib/myLib/zod/src/v4/core/checks.d.ts +278 -0
  106. package/lib/myLib/zod/src/v4/core/checks.js +816 -0
  107. package/lib/myLib/zod/src/v4/core/config.d.ts +9 -0
  108. package/lib/myLib/zod/src/v4/core/config.js +5 -0
  109. package/lib/myLib/zod/src/v4/core/core.d.ts +70 -0
  110. package/lib/myLib/zod/src/v4/core/core.js +95 -0
  111. package/lib/myLib/zod/src/v4/core/doc.d.ts +14 -0
  112. package/lib/myLib/zod/src/v4/core/doc.js +42 -0
  113. package/lib/myLib/zod/src/v4/core/errors.d.ts +220 -0
  114. package/lib/myLib/zod/src/v4/core/errors.js +232 -0
  115. package/lib/myLib/zod/src/v4/core/index.d.ts +15 -0
  116. package/lib/myLib/zod/src/v4/core/index.js +15 -0
  117. package/lib/myLib/zod/src/v4/core/json-schema-generator.d.ts +65 -0
  118. package/lib/myLib/zod/src/v4/core/json-schema-generator.js +120 -0
  119. package/lib/myLib/zod/src/v4/core/json-schema-processors.d.ts +49 -0
  120. package/lib/myLib/zod/src/v4/core/json-schema-processors.js +593 -0
  121. package/lib/myLib/zod/src/v4/core/json-schema.d.ts +88 -0
  122. package/lib/myLib/zod/src/v4/core/json-schema.js +1 -0
  123. package/lib/myLib/zod/src/v4/core/parse.d.ts +49 -0
  124. package/lib/myLib/zod/src/v4/core/parse.js +147 -0
  125. package/lib/myLib/zod/src/v4/core/regexes.d.ts +78 -0
  126. package/lib/myLib/zod/src/v4/core/regexes.js +146 -0
  127. package/lib/myLib/zod/src/v4/core/registries.d.ts +35 -0
  128. package/lib/myLib/zod/src/v4/core/registries.js +51 -0
  129. package/lib/myLib/zod/src/v4/core/schemas.d.ts +1136 -0
  130. package/lib/myLib/zod/src/v4/core/schemas.js +2745 -0
  131. package/lib/myLib/zod/src/v4/core/standard-schema.d.ts +126 -0
  132. package/lib/myLib/zod/src/v4/core/standard-schema.js +1 -0
  133. package/lib/myLib/zod/src/v4/core/to-json-schema.d.ts +114 -0
  134. package/lib/myLib/zod/src/v4/core/to-json-schema.js +488 -0
  135. package/lib/myLib/zod/src/v4/core/util.d.ts +199 -0
  136. package/lib/myLib/zod/src/v4/core/util.js +656 -0
  137. package/lib/myLib/zod/src/v4/core/versions.d.ts +5 -0
  138. package/lib/myLib/zod/src/v4/core/versions.js +5 -0
  139. package/lib/myLib/zod/src/v4/core/zsf.d.ts +91 -0
  140. package/lib/myLib/zod/src/v4/core/zsf.js +1 -0
  141. package/lib/myLib/zod/src/v4/mini/checks.d.ts +1 -0
  142. package/lib/myLib/zod/src/v4/mini/checks.js +1 -0
  143. package/lib/myLib/zod/src/v4/mini/coerce.d.ts +7 -0
  144. package/lib/myLib/zod/src/v4/mini/coerce.js +27 -0
  145. package/lib/myLib/zod/src/v4/mini/external.d.ts +11 -0
  146. package/lib/myLib/zod/src/v4/mini/external.js +16 -0
  147. package/lib/myLib/zod/src/v4/mini/index.d.ts +3 -0
  148. package/lib/myLib/zod/src/v4/mini/index.js +3 -0
  149. package/lib/myLib/zod/src/v4/mini/iso.d.ts +22 -0
  150. package/lib/myLib/zod/src/v4/mini/iso.js +46 -0
  151. package/lib/myLib/zod/src/v4/mini/parse.d.ts +1 -0
  152. package/lib/myLib/zod/src/v4/mini/parse.js +1 -0
  153. package/lib/myLib/zod/src/v4/mini/schemas.js +1244 -0
  154. package/lib/utils/index.d.ts +1 -0
  155. package/lib/utils/index.js +2 -1
  156. package/package.json +5 -3
@@ -1,86 +1,77 @@
1
1
  // 房间分隔
2
+ import { encodePartitionDivision0x1c } from '@ray-js/robot-protocol';
2
3
  import { useContext } from 'react';
3
4
  import { pointsToString } from '../utils';
4
- import { createSetCommonParams } from './createCommonOptions';
5
- import { normalResolve } from './promise';
6
- import { PartDivisionEnum } from './type';
5
+ import { handleMqttError, useStructuredMessage } from './hooks/useStructuredMessage';
7
6
  import { SingletonContext } from './mqttProvider';
8
- import { encodePartitionDivision0x1c } from '@ray-js/robot-protocol';
9
-
10
- // 房间分隔响应类型
11
-
12
- // 设置房间分隔函数类型定义
13
-
7
+ import { PartDivisionEnum } from './type';
8
+ import { validator } from './type/fun';
14
9
  /**
15
10
  * 自定义 Hook,用于房间分隔
16
- * @param devId 设备ID
17
11
  * @returns 包含 setPartDivision 函数的对象
18
12
  */
19
- export const usePartDivision = devId => {
13
+ export const usePartDivision = () => {
20
14
  const {
21
15
  useMqtt,
22
16
  devices,
23
17
  commandVersion
24
18
  } = useContext(SingletonContext);
19
+ const {
20
+ sendStructuredMessage
21
+ } = useStructuredMessage();
25
22
 
26
23
  /**
27
24
  * 设置房间分隔
28
- * @param points 分隔点数组,SDK方法抛出来的坐标直接传入即可
29
- * @param roomId 房间ID,当前要分隔的房间
25
+ * @param points 分隔点数组
26
+ * @param roomId 房间ID,当前要分隔的房间(可以是 int 或 string)
30
27
  * @param origin 地图原点坐标
31
28
  * @returns Promise<PartDivisionResponse> 响应结果
32
29
  */
33
30
 
34
31
  return {
35
32
  setPartDivision: (points, roomId, origin) => {
36
- // 参数验证
37
- if (!Array.isArray(points) || points.length === 0) {
38
- throw new Error('points is required and must be a non-empty array');
39
- }
40
- if (typeof roomId !== 'number' || isNaN(roomId)) {
41
- throw new Error('roomId is required and must be a valid number');
42
- }
43
- if (!origin || typeof origin.x !== 'number' || typeof origin.y !== 'number') {
44
- throw new Error('origin is required and must be a valid Point object with x and y properties');
45
- }
46
- try {
47
- if (useMqtt) {
48
- // 将点数组转换为字符串格式
49
- const pointStr = pointsToString(points, origin);
50
- const params = createSetCommonParams({
51
- deviceId: devId,
52
- reqType: PartDivisionEnum.set,
53
- message: {
33
+ return new Promise((resolve, reject) => {
34
+ try {
35
+ // 使用验证器验证三个独立参数
36
+ const validatedData = validator.validateSetPartDivision(points, roomId, origin);
37
+ const {
38
+ points: validatedPoints,
39
+ roomId: validatedRoomId,
40
+ origin: validatedOrigin
41
+ } = validatedData;
42
+ if (useMqtt) {
43
+ // 将点数组转换为字符串格式
44
+ const pointStr = pointsToString(validatedPoints, validatedOrigin);
45
+ sendStructuredMessage(PartDivisionEnum.set, {
54
46
  lines: [pointStr],
55
47
  // 分隔线数组
56
- ids: [roomId] // 房间ID数组
57
- }
48
+ ids: [validatedRoomId] // 房间ID数组
49
+ }, resolve, error => reject(handleMqttError(error, 'Failed to set part division')), PartDivisionEnum.query // 响应类型是 query,不是 set
50
+ );
51
+ return;
52
+ }
53
+
54
+ // 非 MQTT 模式:使用命令传输
55
+ // 将 roomId 转换为数字(如果它是字符串)
56
+ const roomIdNumber = typeof validatedRoomId === 'string' ? Number(validatedRoomId) : validatedRoomId;
57
+ const command = encodePartitionDivision0x1c({
58
+ version: commandVersion,
59
+ origin: validatedOrigin,
60
+ points: validatedPoints,
61
+ roomId: roomIdNumber
58
62
  });
59
- ty.device.sendMqttMessage(params);
60
- const {
61
- taskId
62
- } = params.message;
63
- return normalResolve(PartDivisionEnum.query, taskId);
63
+ devices.common.model.actions.command_trans.set(command);
64
+ resolve({
65
+ success: true,
66
+ errCode: 0,
67
+ reqType: PartDivisionEnum.query,
68
+ version: commandVersion,
69
+ taskId: `${Date.now()}`
70
+ });
71
+ } catch (error) {
72
+ reject(handleMqttError(error, 'Failed to set part division'));
64
73
  }
65
-
66
- // 非 MQTT 模式:使用命令传输
67
- const command = encodePartitionDivision0x1c({
68
- version: commandVersion,
69
- origin,
70
- points,
71
- roomId
72
- });
73
- devices.common.model.actions.command_trans.set(command);
74
- return Promise.resolve({
75
- success: true,
76
- errCode: 0,
77
- reqType: PartDivisionEnum.query,
78
- version: commandVersion,
79
- taskId: `${Date.now()}`
80
- });
81
- } catch (error) {
82
- throw error instanceof Error ? error : new Error('Failed to set part division');
83
- }
74
+ });
84
75
  }
85
76
  };
86
77
  };
@@ -1,14 +1,8 @@
1
- import { BaseResponse, PartMergeEnum } from './type';
2
- interface PartMergeResponse extends BaseResponse {
3
- reqType: PartMergeEnum.query;
4
- }
5
- type TSetPartMerge = (ids: number[]) => Promise<PartMergeResponse>;
1
+ import { type TSetPartMerge } from './type/protocols';
6
2
  /**
7
3
  * 自定义 Hook,用于分区合并
8
- * @param devId 设备ID
9
4
  * @returns 包含 setPartMerge 函数的对象
10
5
  */
11
- export declare const usePartMerge: (devId: string) => {
6
+ export declare const usePartMerge: () => {
12
7
  setPartMerge: TSetPartMerge;
13
8
  };
14
- export {};
@@ -1,75 +1,60 @@
1
- import "core-js/modules/esnext.iterator.constructor.js";
2
- import "core-js/modules/esnext.iterator.some.js";
3
1
  // 分区合并
4
2
  import { useContext } from 'react';
5
- import { createSetCommonParams } from './createCommonOptions';
6
- import { normalResolve } from './promise';
7
3
  import { PartMergeEnum } from './type';
8
4
  import { SingletonContext } from './mqttProvider';
9
5
  import { encodePartitionMerge0x1e } from '@ray-js/robot-protocol';
10
-
11
- // 分区合并响应类型
12
-
13
- // 设置分区合并函数类型定义
14
-
6
+ import { useStructuredMessage, handleMqttError } from './hooks/useStructuredMessage';
7
+ import { validator } from './type/fun';
15
8
  /**
16
9
  * 自定义 Hook,用于分区合并
17
- * @param devId 设备ID
18
10
  * @returns 包含 setPartMerge 函数的对象
19
11
  */
20
- export const usePartMerge = devId => {
12
+ export const usePartMerge = () => {
21
13
  const {
22
14
  useMqtt,
23
15
  devices,
24
16
  commandVersion
25
17
  } = useContext(SingletonContext);
18
+ const {
19
+ sendStructuredMessage
20
+ } = useStructuredMessage();
26
21
  /**
27
22
  * 设置分区合并
28
- * @param ids 要合并的分区ID数组
23
+ * @param data 包含要合并的分区ID数组的对象
29
24
  * @returns Promise<PartMergeResponse> 响应结果
30
25
  */
31
26
 
32
27
  return {
33
- setPartMerge: ids => {
34
- // 参数验证
35
- if (!ids || ids.length < 2) {
36
- throw new Error('ids is required and length must be greater than 1');
37
- }
38
- if (ids.some(id => typeof id !== 'number')) {
39
- throw new Error('ids must be an array of numbers');
40
- }
41
- try {
42
- if (useMqtt) {
43
- const params = createSetCommonParams({
44
- deviceId: devId,
45
- reqType: PartMergeEnum.set,
46
- message: {
28
+ setPartMerge: data => {
29
+ return new Promise((resolve, reject) => {
30
+ try {
31
+ // 使用 TypeBox Schema 进行参数验证
32
+ const ids = validator.validate('set_part_merge', data);
33
+ if (useMqtt) {
34
+ sendStructuredMessage(PartMergeEnum.set, {
47
35
  ids
48
- }
36
+ }, resolve, error => reject(handleMqttError(error, 'Failed to set part merge')), PartMergeEnum.query // 响应类型是 query,不是 set
37
+ );
38
+ return;
39
+ }
40
+
41
+ // 非 MQTT 模式:使用命令传输
42
+ const command = encodePartitionMerge0x1e({
43
+ version: commandVersion,
44
+ roomIds: ids
45
+ });
46
+ devices.common.model.actions.command_trans.set(command);
47
+ resolve({
48
+ success: true,
49
+ errCode: 0,
50
+ reqType: PartMergeEnum.query,
51
+ version: commandVersion,
52
+ taskId: `${Date.now()}`
49
53
  });
50
- ty.device.sendMqttMessage(params);
51
- const {
52
- taskId
53
- } = params.message;
54
- return normalResolve(PartMergeEnum.query, taskId);
54
+ } catch (error) {
55
+ reject(handleMqttError(error, 'Failed to set part merge'));
55
56
  }
56
-
57
- // 非 MQTT 模式:使用命令传输
58
- const command = encodePartitionMerge0x1e({
59
- version: commandVersion,
60
- roomIds: ids
61
- });
62
- devices.common.model.actions.command_trans.set(command);
63
- return Promise.resolve({
64
- success: true,
65
- errCode: 0,
66
- reqType: PartMergeEnum.query,
67
- version: commandVersion,
68
- taskId: `${Date.now()}`
69
- });
70
- } catch (error) {
71
- throw error instanceof Error ? error : new Error('Failed to set part merge');
72
- }
57
+ });
73
58
  }
74
59
  };
75
60
  };
@@ -1,17 +1,10 @@
1
- import { PromiseWithRejection } from './promise';
2
- type TRequestPassword = () => PromiseWithRejection | Promise<void>;
3
- type TSetPassword = (params: {
4
- password: string;
5
- oldPassword?: string;
6
- taskId?: string;
7
- }) => PromiseWithRejection;
8
- type TCheckPassword = (params: {
9
- password: string;
10
- taskId?: string;
11
- }) => PromiseWithRejection;
12
- export declare const usePassword: (devId: string) => {
1
+ import { type TRequestPassword, type TSetPassword, type TCheckPassword } from './type/protocols';
2
+ /**
3
+ * 自定义 Hook,用于密码管理
4
+ * @returns 包含 requestPassword、setPassword 和 checkPassword 函数的对象
5
+ */
6
+ export declare const usePassword: () => {
13
7
  requestPassword: TRequestPassword;
14
8
  setPassword: TSetPassword;
15
9
  checkPassword: TCheckPassword;
16
10
  };
17
- export {};
@@ -1,94 +1,104 @@
1
1
  import md5 from 'crypto-js/md5';
2
- import { createSetCommonParams } from './createCommonOptions';
3
- import { normalResolve } from './promise';
4
2
  import { PasswordEnum } from './type';
5
3
  import { useContext } from 'react';
6
4
  import { SingletonContext } from './mqttProvider';
7
- export const usePassword = devId => {
5
+ import { useStructuredMessage, handleMqttError } from './hooks/useStructuredMessage';
6
+ import { validator } from './type/fun';
7
+ /**
8
+ * 自定义 Hook,用于密码管理
9
+ * @returns 包含 requestPassword、setPassword 和 checkPassword 函数的对象
10
+ */
11
+ export const usePassword = () => {
8
12
  const {
9
13
  useMqtt
10
14
  } = useContext(SingletonContext);
15
+ const {
16
+ sendStructuredMessage
17
+ } = useStructuredMessage();
11
18
 
12
- // 请求密码状态
19
+ /**
20
+ * 请求密码状态
21
+ * @returns Promise<PasswordResponse> 响应结果
22
+ */
13
23
 
14
- // 设置密码
24
+ /**
25
+ * 设置密码
26
+ * @param params 包含密码设置参数的对象(密码会自动进行 MD5 加密)
27
+ * @returns Promise<PasswordResponse> 响应结果
28
+ */
15
29
 
16
- // 校验密码
30
+ /**
31
+ * 校验密码
32
+ * @param params 包含密码校验参数的对象(密码会自动进行 MD5 加密)
33
+ * @returns Promise<PasswordResponse> 响应结果
34
+ */
17
35
 
18
36
  return {
19
37
  requestPassword: () => {
20
- if (!useMqtt) {
21
- return Promise.reject(new Error('useMqtt is not used'));
22
- }
23
- try {
24
- const params = createSetCommonParams({
25
- deviceId: devId,
26
- reqType: PasswordEnum.query
27
- });
28
- ty.device.sendMqttMessage(params);
29
- const {
30
- taskId
31
- } = params.message;
32
- return normalResolve(PasswordEnum.query, taskId);
33
- } catch (error) {
34
- return Promise.reject(error instanceof Error ? error : new Error('Failed to request password'));
35
- }
38
+ return new Promise((resolve, reject) => {
39
+ try {
40
+ if (!useMqtt) {
41
+ reject(new Error('useMqtt is not used'));
42
+ return;
43
+ }
44
+
45
+ // request_password 不需要参数,直接发送空对象
46
+ sendStructuredMessage(PasswordEnum.query, {}, resolve, error => reject(handleMqttError(error, 'Failed to request password')));
47
+ } catch (error) {
48
+ reject(handleMqttError(error, 'Failed to request password'));
49
+ }
50
+ });
36
51
  },
37
- setPassword: _ref => {
38
- let {
39
- password,
40
- oldPassword,
41
- taskId
42
- } = _ref;
43
- // 参数验证
44
- if (!password || typeof password !== 'string') {
45
- throw new Error('password is required and must be a string');
46
- }
47
- try {
48
- const params = createSetCommonParams({
49
- deviceId: devId,
50
- reqType: PasswordEnum.set,
51
- message: {
52
- taskId: taskId !== null && taskId !== void 0 ? taskId : String(Date.now()),
53
- password: md5(password).toString(),
54
- oldPassword: oldPassword ? md5(oldPassword).toString() : undefined
52
+ setPassword: params => {
53
+ return new Promise((resolve, reject) => {
54
+ try {
55
+ var _params$taskId;
56
+ // 先验证原始参数(密码是明文)
57
+ if (!params.password || typeof params.password !== 'string') {
58
+ reject(new Error('password is required and must be a string'));
59
+ return;
55
60
  }
56
- });
57
- ty.device.sendMqttMessage(params);
58
- const {
59
- taskId: finalTaskId
60
- } = params.message;
61
- return normalResolve(PasswordEnum.rst, finalTaskId);
62
- } catch (error) {
63
- throw error instanceof Error ? error : new Error('Failed to set password');
64
- }
61
+
62
+ // 构建符合 Schema 的数据(密码需要 MD5 加密)
63
+ const passwordData = {
64
+ password: md5(params.password).toString(),
65
+ oldPassword: params.oldPassword ? md5(params.oldPassword).toString() : undefined,
66
+ taskId: (_params$taskId = params.taskId) !== null && _params$taskId !== void 0 ? _params$taskId : String(Date.now())
67
+ };
68
+
69
+ // 使用 TypeBox Schema 进行参数验证
70
+ const validatedData = validator.validate('set_password', passwordData);
71
+ sendStructuredMessage(PasswordEnum.set, validatedData, resolve, error => reject(handleMqttError(error, 'Failed to set password')), PasswordEnum.rst // 响应类型是 rst,不是 set
72
+ );
73
+ } catch (error) {
74
+ reject(handleMqttError(error, 'Failed to set password'));
75
+ }
76
+ });
65
77
  },
66
- checkPassword: _ref2 => {
67
- let {
68
- password,
69
- taskId
70
- } = _ref2;
71
- // 参数验证
72
- if (!password || typeof password !== 'string') {
73
- throw new Error('password is required and must be a string');
74
- }
75
- try {
76
- const params = createSetCommonParams({
77
- deviceId: devId,
78
- reqType: PasswordEnum.check,
79
- message: {
80
- taskId: taskId !== null && taskId !== void 0 ? taskId : String(Date.now()),
81
- password: md5(password).toString()
78
+ checkPassword: params => {
79
+ return new Promise((resolve, reject) => {
80
+ try {
81
+ var _params$taskId2;
82
+ // 先验证原始参数(密码是明文)
83
+ if (!params.password || typeof params.password !== 'string') {
84
+ reject(new Error('password is required and must be a string'));
85
+ return;
82
86
  }
83
- });
84
- ty.device.sendMqttMessage(params);
85
- const {
86
- taskId: finalTaskId
87
- } = params.message;
88
- return normalResolve(PasswordEnum.checkRst, finalTaskId);
89
- } catch (error) {
90
- throw error instanceof Error ? error : new Error('Failed to check password');
91
- }
87
+
88
+ // 构建符合 Schema 的数据(密码需要 MD5 加密)
89
+ const passwordData = {
90
+ password: md5(params.password).toString(),
91
+ taskId: (_params$taskId2 = params.taskId) !== null && _params$taskId2 !== void 0 ? _params$taskId2 : String(Date.now())
92
+ };
93
+
94
+ // 使用 TypeBox Schema 进行参数验证
95
+ const validatedData = validator.validate('check_password', passwordData);
96
+ sendStructuredMessage(PasswordEnum.check, validatedData, resolve, error => reject(handleMqttError(error, 'Failed to check password')), PasswordEnum.checkRst // 响应类型是 checkRst,不是 check
97
+ );
98
+ } catch (error) {
99
+ reject(handleMqttError(error, 'Failed to check password'));
100
+ }
101
+ });
92
102
  }
93
103
  };
94
104
  };
@@ -1,42 +1,9 @@
1
- import { BaseResponse, QuietHoursEnum } from './type';
2
- interface QuietHoursResponse extends BaseResponse {
3
- reqType: QuietHoursEnum.query;
4
- /**
5
- * 是否激活
6
- * 0 表示未激活,1 表示激活
7
- */
8
- active: number;
9
- /**
10
- * 时间段数组,每个元素为 "开始时间, 结束时间" 的字符串
11
- */
12
- time: string[];
13
- /**
14
- * 星期几,1 表示星期一,2 表示星期二,以此类推
15
- */
16
- day: number;
17
- }
18
- interface SetQuiteHoursParams {
19
- startTime: {
20
- hour: number;
21
- minute: number;
22
- };
23
- endTime: {
24
- hour: number;
25
- minute: number;
26
- };
27
- active: number;
28
- day: number;
29
- version?: string;
30
- }
31
- type TSetQuiteHours = (params: SetQuiteHoursParams) => Promise<QuietHoursResponse>;
32
- type TRequestQuiteHours = () => Promise<QuietHoursResponse>;
1
+ import { type TRequestQuietHours, type TSetQuietHours } from './type/protocols';
33
2
  /**
34
3
  * 自定义 Hook,用于勿扰模式
35
- * @param devId 设备ID
36
4
  * @returns 包含 setQuiteHours 和 requestQuiteHours 函数的对象
37
5
  */
38
- export declare const useQuiteHours: (devId: string) => {
39
- setQuiteHours: TSetQuiteHours;
40
- requestQuiteHours: TRequestQuiteHours;
6
+ export declare const useQuiteHours: () => {
7
+ setQuiteHours: TSetQuietHours;
8
+ requestQuiteHours: TRequestQuietHours;
41
9
  };
42
- export {};