homebridge-roborock-vacuum 1.3.2 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/index.js +95 -46
- package/dist/ui/index.js.map +1 -1
- package/package.json +7 -7
- package/roborockLib/lib/vacuum.js +1 -1
package/dist/ui/index.js
CHANGED
|
@@ -6,17 +6,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const crypto_1 = __importDefault(require("crypto"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const plugin_ui_utils_1 = require("@homebridge/plugin-ui-utils");
|
|
10
9
|
const crypto_2 = require("../crypto");
|
|
11
|
-
const roborockAuth = require(
|
|
12
|
-
class RoborockUiServer
|
|
13
|
-
constructor() {
|
|
14
|
-
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
this.onRequest(
|
|
18
|
-
this.onRequest(
|
|
19
|
-
this.
|
|
10
|
+
const roborockAuth = require("../../roborockLib/lib/roborockAuth");
|
|
11
|
+
class RoborockUiServer {
|
|
12
|
+
constructor(HomebridgePluginUiServer) {
|
|
13
|
+
this.homebridgePluginUiServer = new HomebridgePluginUiServer();
|
|
14
|
+
this.homebridgeStoragePath =
|
|
15
|
+
this.homebridgePluginUiServer.homebridgeStoragePath;
|
|
16
|
+
this.homebridgePluginUiServer.onRequest("/auth/send-2fa-email", this.sendTwoFactorEmail.bind(this));
|
|
17
|
+
this.homebridgePluginUiServer.onRequest("/auth/verify-2fa-code", this.verifyTwoFactorCode.bind(this));
|
|
18
|
+
this.homebridgePluginUiServer.onRequest("/auth/login", this.loginWithPassword.bind(this));
|
|
19
|
+
this.homebridgePluginUiServer.onRequest("/auth/logout", this.logout.bind(this));
|
|
20
|
+
this.homebridgePluginUiServer.ready();
|
|
20
21
|
}
|
|
21
22
|
getStoragePath() {
|
|
22
23
|
return this.homebridgeStoragePath || process.cwd();
|
|
@@ -24,9 +25,9 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
24
25
|
async getClientId() {
|
|
25
26
|
const storagePath = this.getStoragePath();
|
|
26
27
|
if (storagePath) {
|
|
27
|
-
const clientIdPath = path_1.default.join(storagePath,
|
|
28
|
+
const clientIdPath = path_1.default.join(storagePath, "roborock.clientID");
|
|
28
29
|
try {
|
|
29
|
-
const stored = JSON.parse(fs_1.default.readFileSync(clientIdPath,
|
|
30
|
+
const stored = JSON.parse(fs_1.default.readFileSync(clientIdPath, "utf8"));
|
|
30
31
|
if (stored && stored.val) {
|
|
31
32
|
return stored.val;
|
|
32
33
|
}
|
|
@@ -36,7 +37,7 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
36
37
|
}
|
|
37
38
|
const clientId = crypto_1.default.randomUUID();
|
|
38
39
|
fs_1.default.mkdirSync(storagePath, { recursive: true });
|
|
39
|
-
fs_1.default.writeFileSync(clientIdPath, JSON.stringify({ val: clientId, ack: true }, null, 2),
|
|
40
|
+
fs_1.default.writeFileSync(clientIdPath, JSON.stringify({ val: clientId, ack: true }, null, 2), "utf8");
|
|
40
41
|
return clientId;
|
|
41
42
|
}
|
|
42
43
|
return crypto_1.default.randomUUID();
|
|
@@ -44,44 +45,53 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
44
45
|
async buildLoginApi(config) {
|
|
45
46
|
const clientID = await this.getClientId();
|
|
46
47
|
return roborockAuth.createLoginApi({
|
|
47
|
-
baseURL: config.baseURL ||
|
|
48
|
+
baseURL: config.baseURL || "usiot.roborock.com",
|
|
48
49
|
username: config.email,
|
|
49
50
|
clientID,
|
|
50
|
-
language:
|
|
51
|
+
language: "en",
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
async sendTwoFactorEmail(payload) {
|
|
54
55
|
const email = payload.email;
|
|
55
56
|
if (!email) {
|
|
56
|
-
return { ok: false, message:
|
|
57
|
+
return { ok: false, message: "Email is required." };
|
|
57
58
|
}
|
|
58
59
|
try {
|
|
59
|
-
const loginApi = await this.buildLoginApi({
|
|
60
|
+
const loginApi = await this.buildLoginApi({
|
|
61
|
+
email,
|
|
62
|
+
baseURL: payload.baseURL,
|
|
63
|
+
});
|
|
60
64
|
await roborockAuth.requestEmailCode(loginApi, email);
|
|
61
|
-
return { ok: true, message:
|
|
65
|
+
return { ok: true, message: "Verification email sent." };
|
|
62
66
|
}
|
|
63
67
|
catch (error) {
|
|
64
|
-
console.error(
|
|
65
|
-
return {
|
|
68
|
+
console.error("2FA email request failed:", (error === null || error === void 0 ? void 0 : error.message) || error);
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
message: (error === null || error === void 0 ? void 0 : error.message) || "Failed to send verification email.",
|
|
72
|
+
};
|
|
66
73
|
}
|
|
67
74
|
}
|
|
68
75
|
async verifyTwoFactorCode(payload) {
|
|
69
76
|
const email = payload.email;
|
|
70
77
|
if (!email) {
|
|
71
|
-
return { ok: false, message:
|
|
78
|
+
return { ok: false, message: "Email is required." };
|
|
72
79
|
}
|
|
73
80
|
if (!payload.code) {
|
|
74
|
-
return { ok: false, message:
|
|
81
|
+
return { ok: false, message: "Verification code is required." };
|
|
75
82
|
}
|
|
76
83
|
let loginResult;
|
|
77
84
|
try {
|
|
78
|
-
const loginApi = await this.buildLoginApi({
|
|
85
|
+
const loginApi = await this.buildLoginApi({
|
|
86
|
+
email,
|
|
87
|
+
baseURL: payload.baseURL,
|
|
88
|
+
});
|
|
79
89
|
const nonce = this.buildNonce();
|
|
80
90
|
const signData = await roborockAuth.signRequest(loginApi, nonce);
|
|
81
91
|
if (!signData || !signData.k) {
|
|
82
|
-
return { ok: false, message:
|
|
92
|
+
return { ok: false, message: "Failed to create login signature." };
|
|
83
93
|
}
|
|
84
|
-
const region = roborockAuth.getRegionConfig(payload.baseURL ||
|
|
94
|
+
const region = roborockAuth.getRegionConfig(payload.baseURL || "usiot.roborock.com");
|
|
85
95
|
loginResult = await roborockAuth.loginWithCode(loginApi, {
|
|
86
96
|
email,
|
|
87
97
|
code: payload.code,
|
|
@@ -92,29 +102,36 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
92
102
|
});
|
|
93
103
|
}
|
|
94
104
|
catch (error) {
|
|
95
|
-
console.error(
|
|
96
|
-
return { ok: false, message: (error === null || error === void 0 ? void 0 : error.message) ||
|
|
105
|
+
console.error("2FA verification request failed:", (error === null || error === void 0 ? void 0 : error.message) || error);
|
|
106
|
+
return { ok: false, message: (error === null || error === void 0 ? void 0 : error.message) || "Verification failed." };
|
|
97
107
|
}
|
|
98
108
|
if (loginResult && loginResult.code === 200 && loginResult.data) {
|
|
99
109
|
const encrypted = (0, crypto_2.encryptSession)(loginResult.data, this.getStoragePath());
|
|
100
|
-
return {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
return {
|
|
111
|
+
ok: true,
|
|
112
|
+
message: "Login completed and token saved.",
|
|
113
|
+
encryptedToken: encrypted,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
console.error("2FA verification failed:", loginResult);
|
|
117
|
+
return { ok: false, message: (loginResult === null || loginResult === void 0 ? void 0 : loginResult.msg) || "Verification failed." };
|
|
104
118
|
}
|
|
105
119
|
async loginWithPassword(payload) {
|
|
106
120
|
const email = payload.email;
|
|
107
121
|
const password = payload.password;
|
|
108
122
|
if (!email || !password) {
|
|
109
|
-
return { ok: false, message:
|
|
123
|
+
return { ok: false, message: "Email and password are required." };
|
|
110
124
|
}
|
|
111
125
|
let loginResult;
|
|
112
126
|
try {
|
|
113
|
-
const loginApi = await this.buildLoginApi({
|
|
127
|
+
const loginApi = await this.buildLoginApi({
|
|
128
|
+
email,
|
|
129
|
+
baseURL: payload.baseURL,
|
|
130
|
+
});
|
|
114
131
|
const nonce = this.buildNonce();
|
|
115
132
|
const signData = await roborockAuth.signRequest(loginApi, nonce);
|
|
116
133
|
if (!signData || !signData.k) {
|
|
117
|
-
return { ok: false, message:
|
|
134
|
+
return { ok: false, message: "Failed to create login signature." };
|
|
118
135
|
}
|
|
119
136
|
loginResult = await roborockAuth.loginByPassword(loginApi, {
|
|
120
137
|
email,
|
|
@@ -124,25 +141,36 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
124
141
|
});
|
|
125
142
|
}
|
|
126
143
|
catch (error) {
|
|
127
|
-
console.error(
|
|
128
|
-
return { ok: false, message: (error === null || error === void 0 ? void 0 : error.message) ||
|
|
144
|
+
console.error("Login request failed:", (error === null || error === void 0 ? void 0 : error.message) || error);
|
|
145
|
+
return { ok: false, message: (error === null || error === void 0 ? void 0 : error.message) || "Login failed." };
|
|
129
146
|
}
|
|
130
147
|
if (loginResult && loginResult.code === 200 && loginResult.data) {
|
|
131
148
|
const encrypted = (0, crypto_2.encryptSession)(loginResult.data, this.getStoragePath());
|
|
132
|
-
return {
|
|
149
|
+
return {
|
|
150
|
+
ok: true,
|
|
151
|
+
message: "Login successful. Token saved.",
|
|
152
|
+
encryptedToken: encrypted,
|
|
153
|
+
};
|
|
133
154
|
}
|
|
134
155
|
if (loginResult && loginResult.code === 2031) {
|
|
135
|
-
return {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
twoFactorRequired: true,
|
|
159
|
+
message: "Two-factor authentication required.",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
console.error("Login failed:", loginResult);
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
message: (loginResult === null || loginResult === void 0 ? void 0 : loginResult.msg) || "Login failed. Check your credentials.",
|
|
166
|
+
};
|
|
139
167
|
}
|
|
140
168
|
async logout() {
|
|
141
169
|
const storagePath = this.getStoragePath();
|
|
142
170
|
if (!storagePath) {
|
|
143
|
-
return { ok: true, message:
|
|
171
|
+
return { ok: true, message: "Logged out. Token cleared." };
|
|
144
172
|
}
|
|
145
|
-
const userDataPath = path_1.default.join(storagePath,
|
|
173
|
+
const userDataPath = path_1.default.join(storagePath, "roborock.UserData");
|
|
146
174
|
try {
|
|
147
175
|
if (fs_1.default.existsSync(userDataPath)) {
|
|
148
176
|
fs_1.default.unlinkSync(userDataPath);
|
|
@@ -151,11 +179,32 @@ class RoborockUiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
|
|
|
151
179
|
catch (error) {
|
|
152
180
|
// Ignore file removal errors.
|
|
153
181
|
}
|
|
154
|
-
return { ok: true, message:
|
|
182
|
+
return { ok: true, message: "Logged out. Token cleared." };
|
|
155
183
|
}
|
|
156
184
|
buildNonce() {
|
|
157
|
-
return crypto_1.default
|
|
185
|
+
return crypto_1.default
|
|
186
|
+
.randomBytes(12)
|
|
187
|
+
.toString("base64")
|
|
188
|
+
.substring(0, 16)
|
|
189
|
+
.replace(/\+/g, "X")
|
|
190
|
+
.replace(/\//g, "Y");
|
|
158
191
|
}
|
|
159
192
|
}
|
|
160
|
-
|
|
193
|
+
// IMPORTANT: Use Function constructor to create a dynamic import that TypeScript won't transform
|
|
194
|
+
//
|
|
195
|
+
// Background: @homebridge/plugin-ui-utils v2+ is a pure ES module that cannot be loaded with require()
|
|
196
|
+
// in Node.js 18+. Normally we would use `await import('@homebridge/plugin-ui-utils')`, but because
|
|
197
|
+
// this project uses TypeScript with "module": "commonjs" in tsconfig.json, TypeScript transforms
|
|
198
|
+
// dynamic imports into require() calls in the compiled output, which defeats the purpose.
|
|
199
|
+
//
|
|
200
|
+
// Solution: Using the Function constructor prevents TypeScript from transforming the import statement.
|
|
201
|
+
// The Function constructor is evaluated at runtime, so TypeScript cannot statically analyze or transform it.
|
|
202
|
+
// This is the recommended workaround for ES module/CommonJS interop when using TypeScript with CommonJS output.
|
|
203
|
+
//
|
|
204
|
+
// Security note: This is safe because the module specifier is a hardcoded string literal, not user input.
|
|
205
|
+
(async () => {
|
|
206
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
207
|
+
const { HomebridgePluginUiServer } = await dynamicImport("@homebridge/plugin-ui-utils");
|
|
208
|
+
new RoborockUiServer(HomebridgePluginUiServer);
|
|
209
|
+
})();
|
|
161
210
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AACpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-roborock-vacuum",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"description": "Roborock Vacuum Cleaner - plugin for Homebridge.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
"test": "jest"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@homebridge/plugin-ui-utils": "^2.
|
|
36
|
+
"@homebridge/plugin-ui-utils": "^2.1.2",
|
|
37
37
|
"abstract-things": "0.9.0",
|
|
38
|
-
"axios": "^1.
|
|
39
|
-
"binary-parser": "^2.
|
|
38
|
+
"axios": "^1.13.2",
|
|
39
|
+
"binary-parser": "^2.3.0",
|
|
40
40
|
"chalk": "4.1.2",
|
|
41
41
|
"crc-32": "^1.2.2",
|
|
42
42
|
"debug": "4.3.5",
|
|
43
43
|
"deep-equal": "2.2.3",
|
|
44
|
-
"express": "^4.
|
|
44
|
+
"express": "^4.22.1",
|
|
45
45
|
"jszip": "^3.10.1",
|
|
46
|
-
"mqtt": "^5.14.
|
|
47
|
-
"node-forge": "^1.3.
|
|
46
|
+
"mqtt": "^5.14.1",
|
|
47
|
+
"node-forge": "^1.3.3",
|
|
48
48
|
"rxjs": "^7.8.2",
|
|
49
49
|
"semver": "7.6.2",
|
|
50
50
|
"tinkerhub-discovery": "0.3.1",
|
|
@@ -124,7 +124,7 @@ class vacuum {
|
|
|
124
124
|
const getCommand = parameter.replace("set", "get");
|
|
125
125
|
await this.getParameter(duid, getCommand);
|
|
126
126
|
} else {
|
|
127
|
-
const result = await this.adapter.messageQueueHandler.sendRequest(duid, parameter);
|
|
127
|
+
const result = await this.adapter.messageQueueHandler.sendRequest(duid, parameter, []);
|
|
128
128
|
this.adapter.log.debug(`Command: ${parameter} result: ${result}`);
|
|
129
129
|
}
|
|
130
130
|
}
|