matterbridge-roborock-vacuum-plugin-regions 1.1.1-jb.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/.github/workflows/build.yml +56 -0
- package/.github/workflows/coverage.yml +59 -0
- package/.github/workflows/publish.yml +37 -0
- package/.tarignore +5 -0
- package/CHANGELOG.md +62 -0
- package/LICENSE +202 -0
- package/README.md +135 -0
- package/README_CLEANMODE.md +29 -0
- package/README_DEV.md +75 -0
- package/README_REPORT_ISSUE.md +34 -0
- package/README_SUPPORTED.md +67 -0
- package/dist/behaviorFactory.js +26 -0
- package/dist/behaviors/BehaviorDeviceGeneric.js +22 -0
- package/dist/behaviors/roborock.vacuum/default/default.js +183 -0
- package/dist/behaviors/roborock.vacuum/default/initalData.js +143 -0
- package/dist/behaviors/roborock.vacuum/default/runtimes.js +21 -0
- package/dist/behaviors/roborock.vacuum/smart/initalData.js +18 -0
- package/dist/behaviors/roborock.vacuum/smart/runtimes.js +11 -0
- package/dist/behaviors/roborock.vacuum/smart/smart.js +119 -0
- package/dist/clientManager.js +17 -0
- package/dist/helper.js +76 -0
- package/dist/index.js +4 -0
- package/dist/initialData/getBatteryStatus.js +24 -0
- package/dist/initialData/getOperationalStates.js +82 -0
- package/dist/initialData/getSupportedAreas.js +120 -0
- package/dist/initialData/getSupportedCleanModes.js +17 -0
- package/dist/initialData/getSupportedRunModes.js +11 -0
- package/dist/initialData/getSupportedScenes.js +26 -0
- package/dist/initialData/index.js +6 -0
- package/dist/model/CloudMessageModel.js +1 -0
- package/dist/model/DockingStationStatus.js +26 -0
- package/dist/model/ExperimentalFeatureSetting.js +30 -0
- package/dist/model/RoomMap.js +19 -0
- package/dist/model/roomIndexMap.js +21 -0
- package/dist/notifyMessageTypes.js +9 -0
- package/dist/platform.js +312 -0
- package/dist/platformRunner.js +90 -0
- package/dist/roborockCommunication/RESTAPI/roborockAuthenticateApi.js +213 -0
- package/dist/roborockCommunication/RESTAPI/roborockIoTApi.js +95 -0
- package/dist/roborockCommunication/Zenum/additionalPropCode.js +4 -0
- package/dist/roborockCommunication/Zenum/authenticateResponseCode.js +7 -0
- package/dist/roborockCommunication/Zenum/dockType.js +4 -0
- package/dist/roborockCommunication/Zenum/operationStatusCode.js +44 -0
- package/dist/roborockCommunication/Zenum/vacuumAndDockErrorCode.js +68 -0
- package/dist/roborockCommunication/Zmodel/apiResponse.js +1 -0
- package/dist/roborockCommunication/Zmodel/authenticateFlowState.js +1 -0
- package/dist/roborockCommunication/Zmodel/authenticateResponse.js +1 -0
- package/dist/roborockCommunication/Zmodel/baseURL.js +1 -0
- package/dist/roborockCommunication/Zmodel/batteryMessage.js +1 -0
- package/dist/roborockCommunication/Zmodel/device.js +1 -0
- package/dist/roborockCommunication/Zmodel/deviceModel.js +28 -0
- package/dist/roborockCommunication/Zmodel/deviceSchema.js +1 -0
- package/dist/roborockCommunication/Zmodel/deviceStatus.js +22 -0
- package/dist/roborockCommunication/Zmodel/dockInfo.js +6 -0
- package/dist/roborockCommunication/Zmodel/home.js +1 -0
- package/dist/roborockCommunication/Zmodel/homeInfo.js +1 -0
- package/dist/roborockCommunication/Zmodel/map.js +1 -0
- package/dist/roborockCommunication/Zmodel/mapInfo.js +29 -0
- package/dist/roborockCommunication/Zmodel/messageResult.js +7 -0
- package/dist/roborockCommunication/Zmodel/multipleMap.js +1 -0
- package/dist/roborockCommunication/Zmodel/networkInfo.js +1 -0
- package/dist/roborockCommunication/Zmodel/product.js +1 -0
- package/dist/roborockCommunication/Zmodel/room.js +1 -0
- package/dist/roborockCommunication/Zmodel/roomInfo.js +22 -0
- package/dist/roborockCommunication/Zmodel/scene.js +16 -0
- package/dist/roborockCommunication/Zmodel/userData.js +1 -0
- package/dist/roborockCommunication/Zmodel/vacuumError.js +27 -0
- package/dist/roborockCommunication/broadcast/abstractClient.js +55 -0
- package/dist/roborockCommunication/broadcast/client/LocalNetworkClient.js +174 -0
- package/dist/roborockCommunication/broadcast/client/LocalNetworkUDPClient.js +129 -0
- package/dist/roborockCommunication/broadcast/client/MQTTClient.js +139 -0
- package/dist/roborockCommunication/broadcast/client.js +1 -0
- package/dist/roborockCommunication/broadcast/clientRouter.js +82 -0
- package/dist/roborockCommunication/broadcast/listener/abstractConnectionListener.js +1 -0
- package/dist/roborockCommunication/broadcast/listener/abstractMessageHandler.js +1 -0
- package/dist/roborockCommunication/broadcast/listener/abstractMessageListener.js +1 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.js +26 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.js +11 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/connectionStateListener.js +43 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/generalSyncMessageListener.js +28 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.js +27 -0
- package/dist/roborockCommunication/broadcast/listener/implementation/syncMessageListener.js +33 -0
- package/dist/roborockCommunication/broadcast/listener/index.js +1 -0
- package/dist/roborockCommunication/broadcast/messageProcessor.js +148 -0
- package/dist/roborockCommunication/broadcast/model/contentMessage.js +1 -0
- package/dist/roborockCommunication/broadcast/model/dps.js +1 -0
- package/dist/roborockCommunication/broadcast/model/headerMessage.js +1 -0
- package/dist/roborockCommunication/broadcast/model/messageContext.js +37 -0
- package/dist/roborockCommunication/broadcast/model/protocol.js +28 -0
- package/dist/roborockCommunication/broadcast/model/requestMessage.js +38 -0
- package/dist/roborockCommunication/broadcast/model/responseMessage.js +14 -0
- package/dist/roborockCommunication/helper/chunkBuffer.js +17 -0
- package/dist/roborockCommunication/helper/cryptoHelper.js +23 -0
- package/dist/roborockCommunication/helper/messageDeserializer.js +98 -0
- package/dist/roborockCommunication/helper/messageSerializer.js +84 -0
- package/dist/roborockCommunication/helper/nameDecoder.js +66 -0
- package/dist/roborockCommunication/helper/sequence.js +16 -0
- package/dist/roborockCommunication/index.js +13 -0
- package/dist/roborockService.js +494 -0
- package/dist/runtimes/handleCloudMessage.js +110 -0
- package/dist/runtimes/handleHomeDataMessage.js +57 -0
- package/dist/runtimes/handleLocalMessage.js +169 -0
- package/dist/rvc.js +51 -0
- package/dist/settings.js +1 -0
- package/dist/share/function.js +93 -0
- package/dist/share/runtimeHelper.js +17 -0
- package/dist/tests/testData/mockData.js +359 -0
- package/eslint.config.js +80 -0
- package/jest.config.js +22 -0
- package/jest.setup.js +2 -0
- package/logo.png +0 -0
- package/matterbridge-roborock-vacuum-plugin.config.json +46 -0
- package/matterbridge-roborock-vacuum-plugin.schema.json +293 -0
- package/misc/status.md +119 -0
- package/package.json +111 -0
- package/prettier.config.js +49 -0
- package/screenshot/IMG_1.PNG +0 -0
- package/screenshot/IMG_2.PNG +0 -0
- package/screenshot/IMG_3.PNG +0 -0
- package/screenshot/IMG_4.PNG +0 -0
- package/screenshot/IMG_5.PNG +0 -0
- package/screenshot/IMG_6.PNG +0 -0
- package/screenshot/IMG_7.PNG +0 -0
- package/src/behaviorFactory.ts +41 -0
- package/src/behaviors/BehaviorDeviceGeneric.ts +31 -0
- package/src/behaviors/roborock.vacuum/default/default.ts +238 -0
- package/src/behaviors/roborock.vacuum/default/initalData.ts +152 -0
- package/src/behaviors/roborock.vacuum/default/runtimes.ts +23 -0
- package/src/behaviors/roborock.vacuum/smart/initalData.ts +20 -0
- package/src/behaviors/roborock.vacuum/smart/runtimes.ts +15 -0
- package/src/behaviors/roborock.vacuum/smart/smart.ts +159 -0
- package/src/clientManager.ts +23 -0
- package/src/helper.ts +97 -0
- package/src/index.ts +16 -0
- package/src/initialData/getBatteryStatus.ts +26 -0
- package/src/initialData/getOperationalStates.ts +94 -0
- package/src/initialData/getSupportedAreas.ts +162 -0
- package/src/initialData/getSupportedCleanModes.ts +22 -0
- package/src/initialData/getSupportedRunModes.ts +14 -0
- package/src/initialData/getSupportedScenes.ts +32 -0
- package/src/initialData/index.ts +6 -0
- package/src/model/CloudMessageModel.ts +11 -0
- package/src/model/DockingStationStatus.ts +41 -0
- package/src/model/ExperimentalFeatureSetting.ts +77 -0
- package/src/model/RoomMap.ts +38 -0
- package/src/model/roomIndexMap.ts +26 -0
- package/src/notifyMessageTypes.ts +8 -0
- package/src/platform.ts +424 -0
- package/src/platformRunner.ts +103 -0
- package/src/roborockCommunication/RESTAPI/roborockAuthenticateApi.ts +302 -0
- package/src/roborockCommunication/RESTAPI/roborockIoTApi.ts +107 -0
- package/src/roborockCommunication/Zenum/additionalPropCode.ts +3 -0
- package/src/roborockCommunication/Zenum/authenticateResponseCode.ts +6 -0
- package/src/roborockCommunication/Zenum/dockType.ts +3 -0
- package/src/roborockCommunication/Zenum/operationStatusCode.ts +43 -0
- package/src/roborockCommunication/Zenum/vacuumAndDockErrorCode.ts +68 -0
- package/src/roborockCommunication/Zmodel/apiResponse.ts +3 -0
- package/src/roborockCommunication/Zmodel/authenticateFlowState.ts +6 -0
- package/src/roborockCommunication/Zmodel/authenticateResponse.ts +5 -0
- package/src/roborockCommunication/Zmodel/baseURL.ts +5 -0
- package/src/roborockCommunication/Zmodel/batteryMessage.ts +16 -0
- package/src/roborockCommunication/Zmodel/device.ts +50 -0
- package/src/roborockCommunication/Zmodel/deviceModel.ts +27 -0
- package/src/roborockCommunication/Zmodel/deviceSchema.ts +8 -0
- package/src/roborockCommunication/Zmodel/deviceStatus.ts +30 -0
- package/src/roborockCommunication/Zmodel/dockInfo.ts +9 -0
- package/src/roborockCommunication/Zmodel/home.ts +13 -0
- package/src/roborockCommunication/Zmodel/homeInfo.ts +5 -0
- package/src/roborockCommunication/Zmodel/map.ts +20 -0
- package/src/roborockCommunication/Zmodel/mapInfo.ts +54 -0
- package/src/roborockCommunication/Zmodel/messageResult.ts +75 -0
- package/src/roborockCommunication/Zmodel/multipleMap.ts +8 -0
- package/src/roborockCommunication/Zmodel/networkInfo.ts +7 -0
- package/src/roborockCommunication/Zmodel/product.ts +9 -0
- package/src/roborockCommunication/Zmodel/room.ts +4 -0
- package/src/roborockCommunication/Zmodel/roomInfo.ts +30 -0
- package/src/roborockCommunication/Zmodel/scene.ts +44 -0
- package/src/roborockCommunication/Zmodel/userData.ts +26 -0
- package/src/roborockCommunication/Zmodel/vacuumError.ts +35 -0
- package/src/roborockCommunication/broadcast/abstractClient.ts +80 -0
- package/src/roborockCommunication/broadcast/client/LocalNetworkClient.ts +218 -0
- package/src/roborockCommunication/broadcast/client/LocalNetworkUDPClient.ts +157 -0
- package/src/roborockCommunication/broadcast/client/MQTTClient.ts +174 -0
- package/src/roborockCommunication/broadcast/client.ts +19 -0
- package/src/roborockCommunication/broadcast/clientRouter.ts +104 -0
- package/src/roborockCommunication/broadcast/listener/abstractConnectionListener.ts +6 -0
- package/src/roborockCommunication/broadcast/listener/abstractMessageHandler.ts +11 -0
- package/src/roborockCommunication/broadcast/listener/abstractMessageListener.ts +5 -0
- package/src/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.ts +33 -0
- package/src/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.ts +16 -0
- package/src/roborockCommunication/broadcast/listener/implementation/connectionStateListener.ts +57 -0
- package/src/roborockCommunication/broadcast/listener/implementation/generalSyncMessageListener.ts +38 -0
- package/src/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.ts +37 -0
- package/src/roborockCommunication/broadcast/listener/implementation/syncMessageListener.ts +50 -0
- package/src/roborockCommunication/broadcast/listener/index.ts +3 -0
- package/src/roborockCommunication/broadcast/messageProcessor.ts +184 -0
- package/src/roborockCommunication/broadcast/model/contentMessage.ts +5 -0
- package/src/roborockCommunication/broadcast/model/dps.ts +19 -0
- package/src/roborockCommunication/broadcast/model/headerMessage.ts +7 -0
- package/src/roborockCommunication/broadcast/model/messageContext.ts +53 -0
- package/src/roborockCommunication/broadcast/model/protocol.ts +28 -0
- package/src/roborockCommunication/broadcast/model/requestMessage.ts +51 -0
- package/src/roborockCommunication/broadcast/model/responseMessage.ts +19 -0
- package/src/roborockCommunication/helper/chunkBuffer.ts +18 -0
- package/src/roborockCommunication/helper/cryptoHelper.ts +30 -0
- package/src/roborockCommunication/helper/messageDeserializer.ts +119 -0
- package/src/roborockCommunication/helper/messageSerializer.ts +101 -0
- package/src/roborockCommunication/helper/nameDecoder.ts +78 -0
- package/src/roborockCommunication/helper/sequence.ts +18 -0
- package/src/roborockCommunication/index.ts +25 -0
- package/src/roborockService.ts +657 -0
- package/src/runtimes/handleCloudMessage.ts +134 -0
- package/src/runtimes/handleHomeDataMessage.ts +67 -0
- package/src/runtimes/handleLocalMessage.ts +209 -0
- package/src/rvc.ts +97 -0
- package/src/settings.ts +1 -0
- package/src/share/function.ts +103 -0
- package/src/share/runtimeHelper.ts +23 -0
- package/src/tests/behaviors/roborock.vacuum/default/default.test.ts +134 -0
- package/src/tests/behaviors/roborock.vacuum/smart/runtimes.test.ts +64 -0
- package/src/tests/behaviors/roborock.vacuum/smart/smart.test.ts +215 -0
- package/src/tests/helper.test.ts +162 -0
- package/src/tests/initialData/getSupportedAreas.test.ts +181 -0
- package/src/tests/model/DockingStationStatus.test.ts +39 -0
- package/src/tests/platformRunner.test.ts +188 -0
- package/src/tests/platformRunner2.test.ts +228 -0
- package/src/tests/platformRunner3.test.ts +46 -0
- package/src/tests/roborockCommunication/RESTAPI/roborockAuthenticateApi.test.ts +144 -0
- package/src/tests/roborockCommunication/RESTAPI/roborockIoTApi.test.ts +106 -0
- package/src/tests/roborockCommunication/broadcast/client/LocalNetworkClient.test.ts +189 -0
- package/src/tests/roborockCommunication/broadcast/client/MQTTClient.test.ts +208 -0
- package/src/tests/roborockCommunication/broadcast/clientRouter.test.ts +168 -0
- package/src/tests/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.test.ts +59 -0
- package/src/tests/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.test.ts +46 -0
- package/src/tests/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.test.ts +71 -0
- package/src/tests/roborockCommunication/broadcast/listener/implementation/syncMessageListener.test.ts +86 -0
- package/src/tests/roborockCommunication/broadcast/messageProcessor.test.ts +126 -0
- package/src/tests/roborockService.setSelectedAreas.test.ts +61 -0
- package/src/tests/roborockService.test.ts +517 -0
- package/src/tests/roborockService2.test.ts +69 -0
- package/src/tests/roborockService3.test.ts +133 -0
- package/src/tests/roborockService4.test.ts +76 -0
- package/src/tests/roborockService5.test.ts +79 -0
- package/src/tests/runtimes/handleCloudMessage.test.ts +200 -0
- package/src/tests/runtimes/handleHomeDataMessage.test.ts +54 -0
- package/src/tests/runtimes/handleLocalMessage.test.ts +227 -0
- package/src/tests/testData/mockData.ts +370 -0
- package/src/tests/testData/mockHomeData-a187.json +286 -0
- package/tsconfig.jest.json +21 -0
- package/tsconfig.json +37 -0
- package/tsconfig.production.json +19 -0
- package/tslint.json +9 -0
- package/web-for-testing/README.md +47 -0
- package/web-for-testing/nodemon.json +7 -0
- package/web-for-testing/package-lock.json +6600 -0
- package/web-for-testing/package.json +36 -0
- package/web-for-testing/src/app.ts +194 -0
- package/web-for-testing/tsconfig-ext.json +19 -0
- package/web-for-testing/tsconfig.json +23 -0
- package/web-for-testing/views/index.ejs +172 -0
- package/web-for-testing/watch.mjs +93 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import crypto from 'node:crypto';
|
|
3
|
+
import { debugStringify } from 'matterbridge/logger';
|
|
4
|
+
export class RoborockIoTApi {
|
|
5
|
+
logger;
|
|
6
|
+
api;
|
|
7
|
+
constructor(userdata, logger) {
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
this.api = axios.create({ baseURL: userdata.rriot.r.a });
|
|
10
|
+
this.api.interceptors.request.use((config) => {
|
|
11
|
+
try {
|
|
12
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
13
|
+
const nonce = crypto
|
|
14
|
+
.randomBytes(6)
|
|
15
|
+
.toString('base64')
|
|
16
|
+
.substring(0, 6)
|
|
17
|
+
.replace(/[+/]/g, (m) => (m === '+' ? 'X' : 'Y'));
|
|
18
|
+
const url = this.api ? new URL(this.api.getUri(config)).pathname : '';
|
|
19
|
+
const data = [userdata.rriot.u, userdata.rriot.s, nonce, timestamp, crypto.createHash('md5').update(url).digest('hex'), '', ''].join(':');
|
|
20
|
+
const hmac = crypto.createHmac('sha256', userdata.rriot.h).update(data).digest('base64');
|
|
21
|
+
config.headers['Authorization'] = `Hawk id="${userdata.rriot.u}", s="${userdata.rriot.s}", ts="${timestamp}", nonce="${nonce}", mac="${hmac}"`;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
this.logger.error(`Failed to initialize RESTAPI ${error ? debugStringify(error) : 'undefined'}`);
|
|
25
|
+
}
|
|
26
|
+
return config;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async getHome(homeId) {
|
|
30
|
+
const result = await this.api.get(`user/homes/${homeId}`);
|
|
31
|
+
const apiResponse = result.data;
|
|
32
|
+
if (apiResponse.result) {
|
|
33
|
+
return apiResponse.result;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.logger.error('Failed to retrieve the home data');
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async getHomev2(homeId) {
|
|
41
|
+
const result = await this.api.get('v2/user/homes/' + homeId);
|
|
42
|
+
const apiResponse = result.data;
|
|
43
|
+
if (apiResponse.result) {
|
|
44
|
+
return apiResponse.result;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.logger.error('Failed to retrieve the home data');
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async getHomev3(homeId) {
|
|
52
|
+
const result = await this.api.get('v3/user/homes/' + homeId);
|
|
53
|
+
const apiResponse = result.data;
|
|
54
|
+
if (apiResponse.result) {
|
|
55
|
+
return apiResponse.result;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.logger.error('Failed to retrieve the home data');
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async getScenes(homeId) {
|
|
63
|
+
const result = await this.api.get('user/scene/home/' + homeId);
|
|
64
|
+
const apiResponse = result.data;
|
|
65
|
+
if (apiResponse.result) {
|
|
66
|
+
return apiResponse.result;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.logger.error('Failed to retrieve scene');
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async startScene(sceneId) {
|
|
74
|
+
const result = await this.api.post(`user/scene/${sceneId}/execute`);
|
|
75
|
+
const apiResponse = result.data;
|
|
76
|
+
if (apiResponse.result) {
|
|
77
|
+
return apiResponse.result;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.logger.error('Failed to execute scene');
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async getCustom(url) {
|
|
85
|
+
const result = await this.api.get(url);
|
|
86
|
+
const apiResponse = result.data;
|
|
87
|
+
if (apiResponse.result) {
|
|
88
|
+
return apiResponse.result;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.logger.error('Failed to execute scene');
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var AuthenticateResponseCode;
|
|
2
|
+
(function (AuthenticateResponseCode) {
|
|
3
|
+
AuthenticateResponseCode[AuthenticateResponseCode["Success"] = 200] = "Success";
|
|
4
|
+
AuthenticateResponseCode[AuthenticateResponseCode["AccountNotFound"] = 2008] = "AccountNotFound";
|
|
5
|
+
AuthenticateResponseCode[AuthenticateResponseCode["InvalidCode"] = 2018] = "InvalidCode";
|
|
6
|
+
AuthenticateResponseCode[AuthenticateResponseCode["RateLimited"] = 9002] = "RateLimited";
|
|
7
|
+
})(AuthenticateResponseCode || (AuthenticateResponseCode = {}));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export var OperationStatusCode;
|
|
2
|
+
(function (OperationStatusCode) {
|
|
3
|
+
OperationStatusCode[OperationStatusCode["Unknown"] = 0] = "Unknown";
|
|
4
|
+
OperationStatusCode[OperationStatusCode["Initiating"] = 1] = "Initiating";
|
|
5
|
+
OperationStatusCode[OperationStatusCode["Sleeping"] = 2] = "Sleeping";
|
|
6
|
+
OperationStatusCode[OperationStatusCode["Idle"] = 3] = "Idle";
|
|
7
|
+
OperationStatusCode[OperationStatusCode["RemoteControl"] = 4] = "RemoteControl";
|
|
8
|
+
OperationStatusCode[OperationStatusCode["Cleaning"] = 5] = "Cleaning";
|
|
9
|
+
OperationStatusCode[OperationStatusCode["ReturningDock"] = 6] = "ReturningDock";
|
|
10
|
+
OperationStatusCode[OperationStatusCode["ManualMode"] = 7] = "ManualMode";
|
|
11
|
+
OperationStatusCode[OperationStatusCode["Charging"] = 8] = "Charging";
|
|
12
|
+
OperationStatusCode[OperationStatusCode["ChargingError"] = 9] = "ChargingError";
|
|
13
|
+
OperationStatusCode[OperationStatusCode["Paused"] = 10] = "Paused";
|
|
14
|
+
OperationStatusCode[OperationStatusCode["SpotCleaning"] = 11] = "SpotCleaning";
|
|
15
|
+
OperationStatusCode[OperationStatusCode["InError"] = 12] = "InError";
|
|
16
|
+
OperationStatusCode[OperationStatusCode["ShuttingDown"] = 13] = "ShuttingDown";
|
|
17
|
+
OperationStatusCode[OperationStatusCode["Updating"] = 14] = "Updating";
|
|
18
|
+
OperationStatusCode[OperationStatusCode["ReturnToDock"] = 15] = "ReturnToDock";
|
|
19
|
+
OperationStatusCode[OperationStatusCode["GoTo"] = 16] = "GoTo";
|
|
20
|
+
OperationStatusCode[OperationStatusCode["ZoneClean"] = 17] = "ZoneClean";
|
|
21
|
+
OperationStatusCode[OperationStatusCode["RoomClean"] = 18] = "RoomClean";
|
|
22
|
+
OperationStatusCode[OperationStatusCode["EmptyingDustContainer"] = 22] = "EmptyingDustContainer";
|
|
23
|
+
OperationStatusCode[OperationStatusCode["WashingTheMop"] = 23] = "WashingTheMop";
|
|
24
|
+
OperationStatusCode[OperationStatusCode["WashingTheMop2"] = 25] = "WashingTheMop2";
|
|
25
|
+
OperationStatusCode[OperationStatusCode["GoingToWashTheMop"] = 26] = "GoingToWashTheMop";
|
|
26
|
+
OperationStatusCode[OperationStatusCode["InCall"] = 28] = "InCall";
|
|
27
|
+
OperationStatusCode[OperationStatusCode["Mapping"] = 29] = "Mapping";
|
|
28
|
+
OperationStatusCode[OperationStatusCode["SOMETHING_NEED_TO_FIGUREOUT"] = 30] = "SOMETHING_NEED_TO_FIGUREOUT";
|
|
29
|
+
OperationStatusCode[OperationStatusCode["Patrol"] = 32] = "Patrol";
|
|
30
|
+
OperationStatusCode[OperationStatusCode["FullyCharged"] = 100] = "FullyCharged";
|
|
31
|
+
OperationStatusCode[OperationStatusCode["DeviceOffline"] = 101] = "DeviceOffline";
|
|
32
|
+
OperationStatusCode[OperationStatusCode["Locked"] = 103] = "Locked";
|
|
33
|
+
OperationStatusCode[OperationStatusCode["AirDryingStopping"] = 202] = "AirDryingStopping";
|
|
34
|
+
OperationStatusCode[OperationStatusCode["RobotStatusMopping"] = 6301] = "RobotStatusMopping";
|
|
35
|
+
OperationStatusCode[OperationStatusCode["CleanMopCleaning"] = 6302] = "CleanMopCleaning";
|
|
36
|
+
OperationStatusCode[OperationStatusCode["CleanMopMopping"] = 6303] = "CleanMopMopping";
|
|
37
|
+
OperationStatusCode[OperationStatusCode["RoomMopping"] = 6304] = "RoomMopping";
|
|
38
|
+
OperationStatusCode[OperationStatusCode["RoomCleanMopCleaning"] = 6305] = "RoomCleanMopCleaning";
|
|
39
|
+
OperationStatusCode[OperationStatusCode["RoomCleanMopMopping"] = 6306] = "RoomCleanMopMopping";
|
|
40
|
+
OperationStatusCode[OperationStatusCode["ZoneMopping"] = 6307] = "ZoneMopping";
|
|
41
|
+
OperationStatusCode[OperationStatusCode["ZoneCleanMopCleaning"] = 6308] = "ZoneCleanMopCleaning";
|
|
42
|
+
OperationStatusCode[OperationStatusCode["ZoneCleanMopMopping"] = 6309] = "ZoneCleanMopMopping";
|
|
43
|
+
OperationStatusCode[OperationStatusCode["BackToDockWashingDuster"] = 6310] = "BackToDockWashingDuster";
|
|
44
|
+
})(OperationStatusCode || (OperationStatusCode = {}));
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export var VacuumErrorCode;
|
|
2
|
+
(function (VacuumErrorCode) {
|
|
3
|
+
VacuumErrorCode[VacuumErrorCode["None"] = 0] = "None";
|
|
4
|
+
VacuumErrorCode[VacuumErrorCode["LidarBlocked"] = 1] = "LidarBlocked";
|
|
5
|
+
VacuumErrorCode[VacuumErrorCode["BumperStuck"] = 2] = "BumperStuck";
|
|
6
|
+
VacuumErrorCode[VacuumErrorCode["WheelsSuspended"] = 3] = "WheelsSuspended";
|
|
7
|
+
VacuumErrorCode[VacuumErrorCode["CliffSensorError"] = 4] = "CliffSensorError";
|
|
8
|
+
VacuumErrorCode[VacuumErrorCode["MainBrushJammed"] = 5] = "MainBrushJammed";
|
|
9
|
+
VacuumErrorCode[VacuumErrorCode["SideBrushJammed"] = 6] = "SideBrushJammed";
|
|
10
|
+
VacuumErrorCode[VacuumErrorCode["WheelsJammed"] = 7] = "WheelsJammed";
|
|
11
|
+
VacuumErrorCode[VacuumErrorCode["RobotTrapped"] = 8] = "RobotTrapped";
|
|
12
|
+
VacuumErrorCode[VacuumErrorCode["NoDustbin"] = 9] = "NoDustbin";
|
|
13
|
+
VacuumErrorCode[VacuumErrorCode["StrainerError"] = 10] = "StrainerError";
|
|
14
|
+
VacuumErrorCode[VacuumErrorCode["CompassError"] = 11] = "CompassError";
|
|
15
|
+
VacuumErrorCode[VacuumErrorCode["LowBattery"] = 12] = "LowBattery";
|
|
16
|
+
VacuumErrorCode[VacuumErrorCode["ChargingError"] = 13] = "ChargingError";
|
|
17
|
+
VacuumErrorCode[VacuumErrorCode["BatteryError"] = 14] = "BatteryError";
|
|
18
|
+
VacuumErrorCode[VacuumErrorCode["WallSensorDirty"] = 15] = "WallSensorDirty";
|
|
19
|
+
VacuumErrorCode[VacuumErrorCode["RobotTilted"] = 16] = "RobotTilted";
|
|
20
|
+
VacuumErrorCode[VacuumErrorCode["SideBrushError"] = 17] = "SideBrushError";
|
|
21
|
+
VacuumErrorCode[VacuumErrorCode["FanError"] = 18] = "FanError";
|
|
22
|
+
VacuumErrorCode[VacuumErrorCode["DockNotConnectedToPower"] = 19] = "DockNotConnectedToPower";
|
|
23
|
+
VacuumErrorCode[VacuumErrorCode["OpticalFlowSensorDirt"] = 20] = "OpticalFlowSensorDirt";
|
|
24
|
+
VacuumErrorCode[VacuumErrorCode["VerticalBumperPressed"] = 21] = "VerticalBumperPressed";
|
|
25
|
+
VacuumErrorCode[VacuumErrorCode["DockLocatorError"] = 22] = "DockLocatorError";
|
|
26
|
+
VacuumErrorCode[VacuumErrorCode["ReturnToDockFail"] = 23] = "ReturnToDockFail";
|
|
27
|
+
VacuumErrorCode[VacuumErrorCode["NogoZoneDetected"] = 24] = "NogoZoneDetected";
|
|
28
|
+
VacuumErrorCode[VacuumErrorCode["CameraError"] = 25] = "CameraError";
|
|
29
|
+
VacuumErrorCode[VacuumErrorCode["WallSensorError"] = 26] = "WallSensorError";
|
|
30
|
+
VacuumErrorCode[VacuumErrorCode["VibrariseJammed"] = 27] = "VibrariseJammed";
|
|
31
|
+
VacuumErrorCode[VacuumErrorCode["RobotOnCarpet"] = 28] = "RobotOnCarpet";
|
|
32
|
+
VacuumErrorCode[VacuumErrorCode["FilterBlocked"] = 29] = "FilterBlocked";
|
|
33
|
+
VacuumErrorCode[VacuumErrorCode["InvisibleWallDetected"] = 30] = "InvisibleWallDetected";
|
|
34
|
+
VacuumErrorCode[VacuumErrorCode["CannotCrossCarpet"] = 31] = "CannotCrossCarpet";
|
|
35
|
+
VacuumErrorCode[VacuumErrorCode["InternalError"] = 32] = "InternalError";
|
|
36
|
+
VacuumErrorCode[VacuumErrorCode["CleanAutoEmptyDock"] = 34] = "CleanAutoEmptyDock";
|
|
37
|
+
VacuumErrorCode[VacuumErrorCode["AutoEmptyDockVoltage"] = 35] = "AutoEmptyDockVoltage";
|
|
38
|
+
VacuumErrorCode[VacuumErrorCode["MoppingRollerJammed"] = 36] = "MoppingRollerJammed";
|
|
39
|
+
VacuumErrorCode[VacuumErrorCode["MoppingRollerNotLowered"] = 37] = "MoppingRollerNotLowered";
|
|
40
|
+
VacuumErrorCode[VacuumErrorCode["ClearWaterBoxHoare"] = 38] = "ClearWaterBoxHoare";
|
|
41
|
+
VacuumErrorCode[VacuumErrorCode["DirtyWaterBoxHoare"] = 39] = "DirtyWaterBoxHoare";
|
|
42
|
+
VacuumErrorCode[VacuumErrorCode["SinkStrainerHoare"] = 40] = "SinkStrainerHoare";
|
|
43
|
+
VacuumErrorCode[VacuumErrorCode["ClearWaterTankEmpty"] = 41] = "ClearWaterTankEmpty";
|
|
44
|
+
VacuumErrorCode[VacuumErrorCode["ClearBrushInstalledProperly"] = 42] = "ClearBrushInstalledProperly";
|
|
45
|
+
VacuumErrorCode[VacuumErrorCode["ClearBrushPositioningError"] = 43] = "ClearBrushPositioningError";
|
|
46
|
+
VacuumErrorCode[VacuumErrorCode["FilterScreenException"] = 44] = "FilterScreenException";
|
|
47
|
+
VacuumErrorCode[VacuumErrorCode["MoppingRollerJammed2"] = 45] = "MoppingRollerJammed2";
|
|
48
|
+
VacuumErrorCode[VacuumErrorCode["UpWaterException"] = 48] = "UpWaterException";
|
|
49
|
+
VacuumErrorCode[VacuumErrorCode["DrainWaterException"] = 49] = "DrainWaterException";
|
|
50
|
+
VacuumErrorCode[VacuumErrorCode["TemperatureProtection"] = 51] = "TemperatureProtection";
|
|
51
|
+
VacuumErrorCode[VacuumErrorCode["CleanCarouselException"] = 52] = "CleanCarouselException";
|
|
52
|
+
VacuumErrorCode[VacuumErrorCode["CleanCarouselWaterFull"] = 53] = "CleanCarouselWaterFull";
|
|
53
|
+
VacuumErrorCode[VacuumErrorCode["WaterCarriageDrop"] = 54] = "WaterCarriageDrop";
|
|
54
|
+
VacuumErrorCode[VacuumErrorCode["CheckCleanCarouse"] = 55] = "CheckCleanCarouse";
|
|
55
|
+
VacuumErrorCode[VacuumErrorCode["AudioError"] = 56] = "AudioError";
|
|
56
|
+
})(VacuumErrorCode || (VacuumErrorCode = {}));
|
|
57
|
+
export var DockErrorCode;
|
|
58
|
+
(function (DockErrorCode) {
|
|
59
|
+
DockErrorCode[DockErrorCode["None"] = 0] = "None";
|
|
60
|
+
DockErrorCode[DockErrorCode["DuctBlockage"] = 34] = "DuctBlockage";
|
|
61
|
+
DockErrorCode[DockErrorCode["WaterEmpty"] = 38] = "WaterEmpty";
|
|
62
|
+
DockErrorCode[DockErrorCode["WasteWaterTankFull"] = 39] = "WasteWaterTankFull";
|
|
63
|
+
DockErrorCode[DockErrorCode["MaintenanceBrushJammed"] = 42] = "MaintenanceBrushJammed";
|
|
64
|
+
DockErrorCode[DockErrorCode["DirtyTankLatchOpen"] = 44] = "DirtyTankLatchOpen";
|
|
65
|
+
DockErrorCode[DockErrorCode["NoDustbin"] = 46] = "NoDustbin";
|
|
66
|
+
DockErrorCode[DockErrorCode["CleaningTankFullOrBlocked"] = 53] = "CleaningTankFullOrBlocked";
|
|
67
|
+
})(DockErrorCode || (DockErrorCode = {}));
|
|
68
|
+
export const SUPPORTED_ATTACHMENTS = ['WATERTANK', 'MOP'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export var DeviceModel;
|
|
2
|
+
(function (DeviceModel) {
|
|
3
|
+
DeviceModel["Q5"] = "roborock.vacuum.a34";
|
|
4
|
+
DeviceModel["Q5_PRO"] = "roborock.vacuum.a72";
|
|
5
|
+
DeviceModel["S5"] = "roborock.vacuum.s5";
|
|
6
|
+
DeviceModel["S5_MAX"] = "roborock.vacuum.s5e";
|
|
7
|
+
DeviceModel["S6"] = "roborock.vacuum.s6";
|
|
8
|
+
DeviceModel["S6_MAXV"] = "roborock.vacuum.a10";
|
|
9
|
+
DeviceModel["S6_PURE"] = "roborock.vacuum.a08";
|
|
10
|
+
DeviceModel["Q7"] = "roborock.vacuum.a40";
|
|
11
|
+
DeviceModel["Q7_PLUS"] = "roborock.vacuum.axx";
|
|
12
|
+
DeviceModel["Q7_MAX"] = "roborock.vacuum.a38";
|
|
13
|
+
DeviceModel["S7"] = "roborock.vacuum.a15";
|
|
14
|
+
DeviceModel["S7_MAXV"] = "roborock.vacuum.a27";
|
|
15
|
+
DeviceModel["S7_MAXV_ULTRA"] = "roborock.vacuum.a65";
|
|
16
|
+
DeviceModel["S7_PRO_ULTRA"] = "roborock.vacuum.a62";
|
|
17
|
+
DeviceModel["Q8_MAX"] = "roborock.vacuum.a73";
|
|
18
|
+
DeviceModel["S8"] = "roborock.vacuum.a51";
|
|
19
|
+
DeviceModel["S8_PRO_ULTRA"] = "roborock.vacuum.a70";
|
|
20
|
+
DeviceModel["S8_MAXV_ULTRA"] = "roborock.vacuum.a97";
|
|
21
|
+
DeviceModel["QREVO_MASTER"] = "roborock.vacuum.a117";
|
|
22
|
+
DeviceModel["QREVO_CURV"] = "roborock.vacuum.a135";
|
|
23
|
+
DeviceModel["QREVO_S"] = "roborock.vacuum.a104";
|
|
24
|
+
DeviceModel["QREVO_PRO"] = "roborock.vacuum.a101";
|
|
25
|
+
DeviceModel["QREVO_MAXV"] = "roborock.vacuum.a87";
|
|
26
|
+
DeviceModel["QREVO_EDGE_5V1"] = "roborock.vacuum.a187";
|
|
27
|
+
DeviceModel["QREVO_EDGE_5AE"] = "roborock.vacuum.xxxx";
|
|
28
|
+
})(DeviceModel || (DeviceModel = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DockInfo } from './dockInfo.js';
|
|
2
|
+
import { VacuumError } from './vacuumError.js';
|
|
3
|
+
export class DeviceStatus {
|
|
4
|
+
errorStatus;
|
|
5
|
+
message;
|
|
6
|
+
constructor(message) {
|
|
7
|
+
this.message = message[0];
|
|
8
|
+
this.errorStatus = new VacuumError(this.message.error_code, this.message.dock_error_status);
|
|
9
|
+
}
|
|
10
|
+
getBattery() {
|
|
11
|
+
return this.message.battery;
|
|
12
|
+
}
|
|
13
|
+
getVacuumErrorCode() {
|
|
14
|
+
return this.message.error_code;
|
|
15
|
+
}
|
|
16
|
+
getDockInfo() {
|
|
17
|
+
return new DockInfo(this.message.dock_type);
|
|
18
|
+
}
|
|
19
|
+
getDockErrorCode() {
|
|
20
|
+
return this.message.dock_error_status;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import decodeComponent from '../helper/nameDecoder.js';
|
|
2
|
+
export class MapInfo {
|
|
3
|
+
maps = [];
|
|
4
|
+
allRooms = [];
|
|
5
|
+
constructor(multimap) {
|
|
6
|
+
this.maps = multimap.map_info.map((mapInfo) => {
|
|
7
|
+
const rooms = mapInfo.rooms?.map((room) => ({
|
|
8
|
+
id: room.id,
|
|
9
|
+
globalId: parseInt(room.iot_name_id),
|
|
10
|
+
iot_name_id: room.iot_name_id,
|
|
11
|
+
tag: room.tag,
|
|
12
|
+
displayName: room.iot_name,
|
|
13
|
+
mapId: mapInfo.mapFlag,
|
|
14
|
+
})) ?? [];
|
|
15
|
+
this.allRooms.push(...rooms);
|
|
16
|
+
return {
|
|
17
|
+
id: mapInfo.mapFlag,
|
|
18
|
+
name: decodeComponent(mapInfo.name),
|
|
19
|
+
rooms,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
getById(id) {
|
|
24
|
+
return this.maps.find((m) => m.id === id)?.name;
|
|
25
|
+
}
|
|
26
|
+
getByName(name) {
|
|
27
|
+
return this.maps.find((m) => m.name?.toLowerCase() === name.toLowerCase())?.id;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var CarpetCleanMode;
|
|
2
|
+
(function (CarpetCleanMode) {
|
|
3
|
+
CarpetCleanMode[CarpetCleanMode["Avoid"] = 0] = "Avoid";
|
|
4
|
+
CarpetCleanMode[CarpetCleanMode["Ignore"] = 2] = "Ignore";
|
|
5
|
+
CarpetCleanMode[CarpetCleanMode["Cross"] = 3] = "Cross";
|
|
6
|
+
CarpetCleanMode[CarpetCleanMode["DynamicLift"] = 200] = "DynamicLift";
|
|
7
|
+
})(CarpetCleanMode || (CarpetCleanMode = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import decodeComponent from '../helper/nameDecoder.js';
|
|
2
|
+
export class RoomInfo {
|
|
3
|
+
rooms = [];
|
|
4
|
+
constructor(roomInfo, roomData) {
|
|
5
|
+
this.rooms = roomData
|
|
6
|
+
.map((entry) => {
|
|
7
|
+
return { id: entry[0], globalId: entry[1] };
|
|
8
|
+
})
|
|
9
|
+
.map((entry) => {
|
|
10
|
+
return {
|
|
11
|
+
id: entry.id,
|
|
12
|
+
room: roomInfo.find((el) => el.id == entry.globalId),
|
|
13
|
+
};
|
|
14
|
+
})
|
|
15
|
+
.map((entry) => {
|
|
16
|
+
return {
|
|
17
|
+
id: entry.id,
|
|
18
|
+
name: decodeComponent(entry.room?.name)?.toLowerCase(),
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DockErrorCode, VacuumErrorCode } from '../Zenum/vacuumAndDockErrorCode.js';
|
|
2
|
+
export class VacuumError {
|
|
3
|
+
vacuumErrorCode;
|
|
4
|
+
dockErrorCode;
|
|
5
|
+
constructor(errorCode, dockErrorCode) {
|
|
6
|
+
this.vacuumErrorCode = errorCode;
|
|
7
|
+
this.dockErrorCode = dockErrorCode;
|
|
8
|
+
}
|
|
9
|
+
hasError() {
|
|
10
|
+
return this.vacuumErrorCode != 0 || this.dockErrorCode != 0;
|
|
11
|
+
}
|
|
12
|
+
isStuck() {
|
|
13
|
+
return this.vacuumErrorCode === VacuumErrorCode.RobotTrapped;
|
|
14
|
+
}
|
|
15
|
+
isBatteryLow() {
|
|
16
|
+
return this.vacuumErrorCode === VacuumErrorCode.LowBattery;
|
|
17
|
+
}
|
|
18
|
+
isBinFull() {
|
|
19
|
+
return this.vacuumErrorCode === VacuumErrorCode.CleanAutoEmptyDock || this.dockErrorCode == DockErrorCode.DuctBlockage;
|
|
20
|
+
}
|
|
21
|
+
isCleanWaterEmpty() {
|
|
22
|
+
return this.vacuumErrorCode === VacuumErrorCode.ClearWaterTankEmpty || this.dockErrorCode == DockErrorCode.WaterEmpty;
|
|
23
|
+
}
|
|
24
|
+
isWasteWaterFull() {
|
|
25
|
+
return this.dockErrorCode == DockErrorCode.WasteWaterTankFull;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { MessageDeserializer } from '../helper/messageDeserializer.js';
|
|
2
|
+
import { MessageSerializer } from '../helper/messageSerializer.js';
|
|
3
|
+
import { ChainedConnectionListener } from './listener/implementation/chainedConnectionListener.js';
|
|
4
|
+
import { ChainedMessageListener } from './listener/implementation/chainedMessageListener.js';
|
|
5
|
+
import { SyncMessageListener } from './listener/implementation/syncMessageListener.js';
|
|
6
|
+
import { ConnectionStateListener } from './listener/implementation/connectionStateListener.js';
|
|
7
|
+
export class AbstractClient {
|
|
8
|
+
isInDisconnectingStep = false;
|
|
9
|
+
retryCount = 0;
|
|
10
|
+
connectionListeners = new ChainedConnectionListener();
|
|
11
|
+
messageListeners = new ChainedMessageListener();
|
|
12
|
+
serializer;
|
|
13
|
+
deserializer;
|
|
14
|
+
context;
|
|
15
|
+
connected = false;
|
|
16
|
+
logger;
|
|
17
|
+
syncMessageListener;
|
|
18
|
+
constructor(logger, context) {
|
|
19
|
+
this.context = context;
|
|
20
|
+
this.serializer = new MessageSerializer(this.context, logger);
|
|
21
|
+
this.deserializer = new MessageDeserializer(this.context, logger);
|
|
22
|
+
this.syncMessageListener = new SyncMessageListener(logger);
|
|
23
|
+
this.messageListeners.register(this.syncMessageListener);
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
}
|
|
26
|
+
initializeConnectionStateListener() {
|
|
27
|
+
const connectionStateListener = new ConnectionStateListener(this.logger, this, this.clientName, this.shouldReconnect);
|
|
28
|
+
this.connectionListeners.register(connectionStateListener);
|
|
29
|
+
}
|
|
30
|
+
async get(duid, request) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
this.syncMessageListener.waitFor(request.messageId, request, (response) => resolve(response), reject);
|
|
33
|
+
this.send(duid, request);
|
|
34
|
+
})
|
|
35
|
+
.then((result) => {
|
|
36
|
+
return result;
|
|
37
|
+
})
|
|
38
|
+
.catch((error) => {
|
|
39
|
+
this.logger.error(error.message);
|
|
40
|
+
return undefined;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
registerDevice(duid, localKey, pv, nonce) {
|
|
44
|
+
this.context.registerDevice(duid, localKey, pv, nonce);
|
|
45
|
+
}
|
|
46
|
+
registerConnectionListener(listener) {
|
|
47
|
+
this.connectionListeners.register(listener);
|
|
48
|
+
}
|
|
49
|
+
registerMessageListener(listener) {
|
|
50
|
+
this.messageListeners.register(listener);
|
|
51
|
+
}
|
|
52
|
+
isConnected() {
|
|
53
|
+
return this.connected;
|
|
54
|
+
}
|
|
55
|
+
}
|