@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.
- package/lib/mqtt/createCommonOptions.d.ts +4 -2
- package/lib/mqtt/createCommonOptions.js +10 -5
- package/lib/mqtt/hooks/useStructuredMessage.d.ts +14 -0
- package/lib/mqtt/hooks/useStructuredMessage.js +131 -0
- package/lib/mqtt/mqttProvider.d.ts +19 -1
- package/lib/mqtt/mqttProvider.js +69 -8
- package/lib/mqtt/promise.d.ts +57 -4
- package/lib/mqtt/promise.js +115 -36
- package/lib/mqtt/type/fun.d.ts +49 -0
- package/lib/mqtt/type/fun.js +145 -0
- package/lib/mqtt/type/index.d.ts +0 -7
- package/lib/mqtt/type/index.js +0 -1
- package/lib/mqtt/type/protocols/base.d.ts +5 -0
- package/lib/mqtt/type/protocols/base.js +32 -0
- package/lib/mqtt/type/protocols/carpetCleanProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/carpetCleanProtocol.js +16 -0
- package/lib/mqtt/type/protocols/carpetProtocol.d.ts +41 -0
- package/lib/mqtt/type/protocols/carpetProtocol.js +202 -0
- package/lib/mqtt/type/protocols/devInfoProtocol.d.ts +5 -0
- package/lib/mqtt/type/protocols/devInfoProtocol.js +12 -0
- package/lib/mqtt/type/protocols/deviceModelProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/deviceModelProtocol.js +34 -0
- package/lib/mqtt/type/protocols/furnitureModelProtocol.d.ts +10 -0
- package/lib/mqtt/type/protocols/furnitureModelProtocol.js +35 -0
- package/lib/mqtt/type/protocols/historyMapProtocol.d.ts +17 -0
- package/lib/mqtt/type/protocols/historyMapProtocol.js +37 -0
- package/lib/mqtt/type/protocols/index.d.ts +20 -0
- package/lib/mqtt/type/protocols/index.js +20 -0
- package/lib/mqtt/type/protocols/partDivisionProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/partDivisionProtocol.js +12 -0
- package/lib/mqtt/type/protocols/partMergeProtocol.d.ts +7 -0
- package/lib/mqtt/type/protocols/partMergeProtocol.js +12 -0
- package/lib/mqtt/type/protocols/passwordProtocol.d.ts +11 -0
- package/lib/mqtt/type/protocols/passwordProtocol.js +25 -0
- package/lib/mqtt/type/protocols/quietHoursProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/quietHoursProtocol.js +35 -0
- package/lib/mqtt/type/protocols/resetMapProtocol.d.ts +4 -0
- package/lib/mqtt/type/protocols/resetMapProtocol.js +1 -0
- package/lib/mqtt/type/protocols/roomPropertyProtocol.d.ts +14 -0
- package/lib/mqtt/type/protocols/roomPropertyProtocol.js +113 -0
- package/lib/mqtt/type/protocols/scheduleProtocol.d.ts +18 -0
- package/lib/mqtt/type/protocols/scheduleProtocol.js +100 -0
- package/lib/mqtt/type/protocols/selectRoomCleanProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/selectRoomCleanProtocol.js +40 -0
- package/lib/mqtt/type/protocols/spotCleanProtocol.d.ts +9 -0
- package/lib/mqtt/type/protocols/spotCleanProtocol.js +72 -0
- package/lib/mqtt/type/protocols/virtualAreaProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/virtualAreaProtocol.js +36 -0
- package/lib/mqtt/type/protocols/virtualWallProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/virtualWallProtocol.js +25 -0
- package/lib/mqtt/type/protocols/voiceProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/voiceProtocol.js +23 -0
- package/lib/mqtt/type/protocols/wifiMapProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/wifiMapProtocol.js +14 -0
- package/lib/mqtt/type/protocols/zoneCleanProtocol.d.ts +8 -0
- package/lib/mqtt/type/protocols/zoneCleanProtocol.js +49 -0
- package/lib/mqtt/useCarpet.d.ts +7 -67
- package/lib/mqtt/useCarpet.js +101 -181
- package/lib/mqtt/useCarpetClean.d.ts +2 -11
- package/lib/mqtt/useCarpetClean.js +24 -51
- package/lib/mqtt/useDevInfo.d.ts +8 -6
- package/lib/mqtt/useDevInfo.js +44 -36
- package/lib/mqtt/useDeviceModel.d.ts +6 -19
- package/lib/mqtt/useDeviceModel.js +29 -42
- package/lib/mqtt/useFurnitureModel.d.ts +6 -18
- package/lib/mqtt/useFurnitureModel.js +29 -43
- package/lib/mqtt/useHistoryMap.d.ts +2 -18
- package/lib/mqtt/useHistoryMap.js +102 -119
- package/lib/mqtt/usePartDivision.d.ts +2 -9
- package/lib/mqtt/usePartDivision.js +48 -57
- package/lib/mqtt/usePartMerge.d.ts +2 -8
- package/lib/mqtt/usePartMerge.js +34 -49
- package/lib/mqtt/usePassword.d.ts +6 -13
- package/lib/mqtt/usePassword.js +84 -74
- package/lib/mqtt/useQuiteHours.d.ts +4 -37
- package/lib/mqtt/useQuiteHours.js +66 -100
- package/lib/mqtt/useResetMap.d.ts +2 -8
- package/lib/mqtt/useResetMap.js +27 -34
- package/lib/mqtt/useRoomProperty.d.ts +8 -9
- package/lib/mqtt/useRoomProperty.js +67 -65
- package/lib/mqtt/useSchedule.d.ts +3 -23
- package/lib/mqtt/useSchedule.js +72 -101
- package/lib/mqtt/useSelectRoomClean.d.ts +3 -24
- package/lib/mqtt/useSelectRoomClean.js +107 -133
- package/lib/mqtt/useSpotClean.d.ts +5 -15
- package/lib/mqtt/useSpotClean.js +68 -121
- package/lib/mqtt/useVirtualArea.d.ts +6 -17
- package/lib/mqtt/useVirtualArea.js +109 -119
- package/lib/mqtt/useVirtualWall.d.ts +2 -18
- package/lib/mqtt/useVirtualWall.js +69 -90
- package/lib/mqtt/useVoice.d.ts +2 -16
- package/lib/mqtt/useVoice.js +48 -68
- package/lib/mqtt/useWifiMap.d.ts +6 -5
- package/lib/mqtt/useWifiMap.js +43 -42
- package/lib/mqtt/useZoneClean.d.ts +2 -21
- package/lib/mqtt/useZoneClean.js +125 -137
- package/lib/myLib/zod/mini/index.d.cts +1 -0
- package/lib/myLib/zod/mini/index.d.ts +1 -0
- package/lib/myLib/zod/mini/index.js +1 -0
- package/lib/myLib/zod/mini/package.json +6 -0
- package/lib/myLib/zod/src/mini/index.d.ts +1 -0
- package/lib/myLib/zod/src/mini/index.js +1 -0
- package/lib/myLib/zod/src/v4/core/api.d.ts +306 -0
- package/lib/myLib/zod/src/v4/core/api.js +1256 -0
- package/lib/myLib/zod/src/v4/core/checks.d.ts +278 -0
- package/lib/myLib/zod/src/v4/core/checks.js +816 -0
- package/lib/myLib/zod/src/v4/core/config.d.ts +9 -0
- package/lib/myLib/zod/src/v4/core/config.js +5 -0
- package/lib/myLib/zod/src/v4/core/core.d.ts +70 -0
- package/lib/myLib/zod/src/v4/core/core.js +95 -0
- package/lib/myLib/zod/src/v4/core/doc.d.ts +14 -0
- package/lib/myLib/zod/src/v4/core/doc.js +42 -0
- package/lib/myLib/zod/src/v4/core/errors.d.ts +220 -0
- package/lib/myLib/zod/src/v4/core/errors.js +232 -0
- package/lib/myLib/zod/src/v4/core/index.d.ts +15 -0
- package/lib/myLib/zod/src/v4/core/index.js +15 -0
- package/lib/myLib/zod/src/v4/core/json-schema-generator.d.ts +65 -0
- package/lib/myLib/zod/src/v4/core/json-schema-generator.js +120 -0
- package/lib/myLib/zod/src/v4/core/json-schema-processors.d.ts +49 -0
- package/lib/myLib/zod/src/v4/core/json-schema-processors.js +593 -0
- package/lib/myLib/zod/src/v4/core/json-schema.d.ts +88 -0
- package/lib/myLib/zod/src/v4/core/json-schema.js +1 -0
- package/lib/myLib/zod/src/v4/core/parse.d.ts +49 -0
- package/lib/myLib/zod/src/v4/core/parse.js +147 -0
- package/lib/myLib/zod/src/v4/core/regexes.d.ts +78 -0
- package/lib/myLib/zod/src/v4/core/regexes.js +146 -0
- package/lib/myLib/zod/src/v4/core/registries.d.ts +35 -0
- package/lib/myLib/zod/src/v4/core/registries.js +51 -0
- package/lib/myLib/zod/src/v4/core/schemas.d.ts +1136 -0
- package/lib/myLib/zod/src/v4/core/schemas.js +2745 -0
- package/lib/myLib/zod/src/v4/core/standard-schema.d.ts +126 -0
- package/lib/myLib/zod/src/v4/core/standard-schema.js +1 -0
- package/lib/myLib/zod/src/v4/core/to-json-schema.d.ts +114 -0
- package/lib/myLib/zod/src/v4/core/to-json-schema.js +488 -0
- package/lib/myLib/zod/src/v4/core/util.d.ts +199 -0
- package/lib/myLib/zod/src/v4/core/util.js +656 -0
- package/lib/myLib/zod/src/v4/core/versions.d.ts +5 -0
- package/lib/myLib/zod/src/v4/core/versions.js +5 -0
- package/lib/myLib/zod/src/v4/core/zsf.d.ts +91 -0
- package/lib/myLib/zod/src/v4/core/zsf.js +1 -0
- package/lib/myLib/zod/src/v4/mini/checks.d.ts +1 -0
- package/lib/myLib/zod/src/v4/mini/checks.js +1 -0
- package/lib/myLib/zod/src/v4/mini/coerce.d.ts +7 -0
- package/lib/myLib/zod/src/v4/mini/coerce.js +27 -0
- package/lib/myLib/zod/src/v4/mini/external.d.ts +11 -0
- package/lib/myLib/zod/src/v4/mini/external.js +16 -0
- package/lib/myLib/zod/src/v4/mini/index.d.ts +3 -0
- package/lib/myLib/zod/src/v4/mini/index.js +3 -0
- package/lib/myLib/zod/src/v4/mini/iso.d.ts +22 -0
- package/lib/myLib/zod/src/v4/mini/iso.js +46 -0
- package/lib/myLib/zod/src/v4/mini/parse.d.ts +1 -0
- package/lib/myLib/zod/src/v4/mini/parse.js +1 -0
- package/lib/myLib/zod/src/v4/mini/schemas.js +1244 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +2 -1
- 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 {
|
|
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 {
|
|
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 =
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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: [
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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 {
|
|
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: (
|
|
6
|
+
export declare const usePartMerge: () => {
|
|
12
7
|
setPartMerge: TSetPartMerge;
|
|
13
8
|
};
|
|
14
|
-
export {};
|
package/lib/mqtt/usePartMerge.js
CHANGED
|
@@ -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 =
|
|
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
|
|
23
|
+
* @param data 包含要合并的分区ID数组的对象
|
|
29
24
|
* @returns Promise<PartMergeResponse> 响应结果
|
|
30
25
|
*/
|
|
31
26
|
|
|
32
27
|
return {
|
|
33
|
-
setPartMerge:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
51
|
-
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 {};
|
package/lib/mqtt/usePassword.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
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:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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 {
|
|
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: (
|
|
39
|
-
setQuiteHours:
|
|
40
|
-
requestQuiteHours:
|
|
6
|
+
export declare const useQuiteHours: () => {
|
|
7
|
+
setQuiteHours: TSetQuietHours;
|
|
8
|
+
requestQuiteHours: TRequestQuietHours;
|
|
41
9
|
};
|
|
42
|
-
export {};
|