@zeppos/zeus-cli 1.0.26 → 1.1.0-beta
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/README.md +1 -1
- package/api/index.js +250 -0
- package/bin/cli.js +1 -0
- package/config/device.js +3 -2
- package/config/project.js +23 -7
- package/index.js +1 -0
- package/modules/bridge.js +205 -0
- package/modules/build.js +107 -64
- package/modules/config.js +21 -24
- package/modules/create/index.js +7 -3
- package/modules/help.js +1 -0
- package/modules/login.js +75 -100
- package/modules/run.js +22 -58
- package/modules/simulator.js +7 -4
- package/modules/status.js +15 -27
- package/modules/storage.js +88 -4
- package/modules/websocket.js +105 -0
- package/package.json +6 -1
- package/utils/common.js +106 -0
- package/utils/hm_analytics.js +35 -0
- package/utils/login.js +0 -126
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeppos/zeus-cli",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0-beta",
|
|
4
4
|
"description": "zeus mini-program tools",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "zepp",
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
"@types/rimraf": "^3.0.2",
|
|
26
26
|
"@types/supports-color": "^8.1.1",
|
|
27
27
|
"@types/update-notifier": "^5.1.0",
|
|
28
|
+
"@types/uuid": "^8.3.3",
|
|
29
|
+
"@types/ws": "^8.2.2",
|
|
28
30
|
"@types/yargs": "^17.0.2",
|
|
29
31
|
"@types/yeoman-environment": "^2.10.5",
|
|
30
32
|
"clean-webpack-plugin": "^4.0.0",
|
|
@@ -57,6 +59,9 @@
|
|
|
57
59
|
"shelljs": "^0.8.4",
|
|
58
60
|
"socket.io-client": "^4.3.0",
|
|
59
61
|
"update-notifier": "^5.1.0",
|
|
62
|
+
"uuid": "^8.3.2",
|
|
63
|
+
"vorpal": "^1.12.0",
|
|
64
|
+
"ws": "^8.4.0",
|
|
60
65
|
"yargs": "^17.1.1",
|
|
61
66
|
"yeoman-environment": "^3.6.0"
|
|
62
67
|
}
|
package/utils/common.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
exports.__esModule = true;
|
|
25
|
+
exports.getDeviceInfoFromAppJson = exports.handleListenMsgEvent = exports.getOptionalConnectDevice = exports.uint8ToArray = void 0;
|
|
26
|
+
var path = __importStar(require("path"));
|
|
27
|
+
var fs_1 = __importDefault(require("fs"));
|
|
28
|
+
var logger = __importStar(require("./logger"));
|
|
29
|
+
var storage_1 = require("../modules/storage");
|
|
30
|
+
var project_1 = require("../config/project");
|
|
31
|
+
var device_1 = require("../config/device");
|
|
32
|
+
function uint8ToArray(source) {
|
|
33
|
+
return Array.prototype.slice.call(source);
|
|
34
|
+
}
|
|
35
|
+
exports.uint8ToArray = uint8ToArray;
|
|
36
|
+
// 处理已连接设备
|
|
37
|
+
// 客户端变更推送接口文档:https://huami.feishu.cn/wiki/wikcnzt1OjVa1qazCYBPrTITEoh#bFt0xQ
|
|
38
|
+
function getOptionalConnectDevice(connectDeviceArr) {
|
|
39
|
+
var result = {};
|
|
40
|
+
connectDeviceArr.map(function (item) {
|
|
41
|
+
var clientId = item.clientId, type = item.type, name = item.name, status = item.status;
|
|
42
|
+
if (type === 'debug' && status === 'online') {
|
|
43
|
+
result[name] = clientId;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
exports.getOptionalConnectDevice = getOptionalConnectDevice;
|
|
49
|
+
function handleListenMsgEvent(msgEventName, data) {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
switch (msgEventName) {
|
|
52
|
+
// 客户端变更推送
|
|
53
|
+
case 'sysEventPush':
|
|
54
|
+
var clients = data.params.clients;
|
|
55
|
+
var connectedDevice = getOptionalConnectDevice(clients);
|
|
56
|
+
project_1.____inner_global_variable.bridgeOptionalDevice = JSON.stringify(connectedDevice);
|
|
57
|
+
break;
|
|
58
|
+
// 处理连接设备的返回
|
|
59
|
+
case 'connectClient':
|
|
60
|
+
var _c = data.result, result = _c === void 0 ? '' : _c, _d = data.error, error = _d === void 0 ? {} : _d;
|
|
61
|
+
if (result && result === 'success') {
|
|
62
|
+
var choiredDevice = project_1.____inner_global_variable.bridgeChoiredDevice;
|
|
63
|
+
logger.info("successfully connected to ".concat(choiredDevice, "."));
|
|
64
|
+
}
|
|
65
|
+
if (error && JSON.stringify(error) !== '{}') {
|
|
66
|
+
var _e = data.error, _f = _e.code, code = _f === void 0 ? 0 : _f, _g = _e.message, message = _g === void 0 ? '' : _g;
|
|
67
|
+
logger.error("".concat(code, ": ").concat(message));
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
// 监听sysSettingPush消息的返回,如uninstall删除设备(实际走的sysMessagePush)
|
|
71
|
+
case 'sysSettingPush':
|
|
72
|
+
logger.info(typeof data === 'object' ? (_a = data === null || data === void 0 ? void 0 : data.params) === null || _a === void 0 ? void 0 : _a.content : data);
|
|
73
|
+
break;
|
|
74
|
+
// 监听sysMessagePush消息的返回
|
|
75
|
+
case 'sysMessagePush':
|
|
76
|
+
logger.info(typeof data === 'object' ? (_b = data === null || data === void 0 ? void 0 : data.params) === null || _b === void 0 ? void 0 : _b.content : data);
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.handleListenMsgEvent = handleListenMsgEvent;
|
|
83
|
+
// 从 app.json 获取信息
|
|
84
|
+
var getDeviceInfoFromAppJson = function (curTarget) {
|
|
85
|
+
var _curTarget = curTarget ? curTarget : storage_1.globalStorage.get(project_1.buildStorageKey.targetDeviceToBuild);
|
|
86
|
+
var appJsonFilePath = path.resolve('./app.json');
|
|
87
|
+
var appJsonContent = JSON.parse(fs_1["default"].readFileSync(appJsonFilePath, 'utf-8'));
|
|
88
|
+
var targets = appJsonContent.targets;
|
|
89
|
+
var targetsContent = targets[_curTarget];
|
|
90
|
+
var platforms = (targetsContent ? targetsContent : targets[Object.keys(targets)[0]]).platforms;
|
|
91
|
+
var _a = platforms[0].deviceSource, deviceSource = _a === void 0 ? 229 : _a;
|
|
92
|
+
var deviceSourceArr = platforms.map(function (item) {
|
|
93
|
+
return item.deviceSource;
|
|
94
|
+
});
|
|
95
|
+
// TODO: deviceSource 区分国内和海外,但是用的时候只取国内的?
|
|
96
|
+
var _b = appJsonContent.app, appId = _b.appId, appName = _b.appName, appType = _b.appType;
|
|
97
|
+
return {
|
|
98
|
+
deviceSource: deviceSource,
|
|
99
|
+
appId: appId,
|
|
100
|
+
appName: appName,
|
|
101
|
+
appType: appType,
|
|
102
|
+
deviceSourceArr: deviceSourceArr,
|
|
103
|
+
targetDeviceInternalName: device_1.deviceInternalCodeName[deviceSource]
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
exports.getDeviceInfoFromAppJson = getDeviceInfoFromAppJson;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.HM_Analytics = void 0;
|
|
7
|
+
var uuid_1 = require("uuid");
|
|
8
|
+
var axios_1 = __importDefault(require("axios"));
|
|
9
|
+
var project_1 = require("../config/project");
|
|
10
|
+
var analytics_app_id = 'eb38cc404a5211d59d8b4653cd00c51c';
|
|
11
|
+
var HM_Analytics = function (event_id, options) {
|
|
12
|
+
var eventPackage = {
|
|
13
|
+
ltp: "devops",
|
|
14
|
+
c: {
|
|
15
|
+
uid: (0, uuid_1.v4)()
|
|
16
|
+
},
|
|
17
|
+
e: [
|
|
18
|
+
{
|
|
19
|
+
ei: event_id,
|
|
20
|
+
ep: options,
|
|
21
|
+
et: new Date().getTime(),
|
|
22
|
+
etp: "cnt"
|
|
23
|
+
},
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
var eventPackageStr = Buffer.from(JSON.stringify(eventPackage)).toString('base64');
|
|
27
|
+
axios_1["default"].post("".concat(project_1.analyticsHost, "/api/v5/server/collect"), eventPackageStr, {
|
|
28
|
+
headers: {
|
|
29
|
+
appid: analytics_app_id
|
|
30
|
+
}
|
|
31
|
+
})["catch"](function (error) {
|
|
32
|
+
// console.log(error.message)
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.HM_Analytics = HM_Analytics;
|
package/utils/login.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
-
};
|
|
41
|
-
exports.__esModule = true;
|
|
42
|
-
exports.getUserInfo = exports.loginByLocal = void 0;
|
|
43
|
-
var axios_1 = __importDefault(require("axios"));
|
|
44
|
-
var lodash_1 = __importDefault(require("lodash"));
|
|
45
|
-
var qs_1 = __importDefault(require("qs"));
|
|
46
|
-
var project_1 = require("../config/project");
|
|
47
|
-
var REGISTER_TEST_URL = 'https://api-mifit-staging.huami.com';
|
|
48
|
-
var REGISTER_PRO_URL = 'https://api-user.huami.com';
|
|
49
|
-
var CUR_REGISTER_URL = project_1.ACCOUNT_ENV === 'test' ? REGISTER_TEST_URL : REGISTER_PRO_URL;
|
|
50
|
-
var LOGIN_URL = 'https://account.huami.com';
|
|
51
|
-
var postForm = function (url, data) {
|
|
52
|
-
return (0, axios_1["default"])({
|
|
53
|
-
method: 'POST',
|
|
54
|
-
headers: {
|
|
55
|
-
'content-type': 'application/x-www-form-urlencoded'
|
|
56
|
-
},
|
|
57
|
-
data: qs_1["default"].stringify(data),
|
|
58
|
-
url: url
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
var loginByLocal = function (account, password) { return __awaiter(void 0, void 0, void 0, function () {
|
|
62
|
-
var data, checkInfo, loginInfo;
|
|
63
|
-
return __generator(this, function (_a) {
|
|
64
|
-
switch (_a.label) {
|
|
65
|
-
case 0:
|
|
66
|
-
data = {
|
|
67
|
-
client_id: 'HuaMi',
|
|
68
|
-
country_code: 'zh-CN',
|
|
69
|
-
json_response: 'true',
|
|
70
|
-
name: '',
|
|
71
|
-
password: password,
|
|
72
|
-
phoneOrEmail: account,
|
|
73
|
-
redirect_uri: 'https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html',
|
|
74
|
-
state: 'REDIRECTION',
|
|
75
|
-
token: 'access'
|
|
76
|
-
};
|
|
77
|
-
if (/^[1][0-9]{10}$/.test(account)) {
|
|
78
|
-
data.phoneOrEmail = encodeURIComponent("+86".concat(account));
|
|
79
|
-
}
|
|
80
|
-
data.name = data.phoneOrEmail.split('@')[0];
|
|
81
|
-
return [4 /*yield*/, postForm("".concat(CUR_REGISTER_URL, "/registrations/").concat(data.phoneOrEmail, "/tokens"), data)];
|
|
82
|
-
case 1:
|
|
83
|
-
checkInfo = _a.sent();
|
|
84
|
-
return [4 /*yield*/, postForm("".concat(LOGIN_URL, "/v2/client/login"), {
|
|
85
|
-
app_name: 'com.huami.webapp',
|
|
86
|
-
app_version: '4.3.0',
|
|
87
|
-
code: lodash_1["default"].get(checkInfo, 'data.access', ''),
|
|
88
|
-
country_code: 'zh-cn',
|
|
89
|
-
device_id: '02:00:00:00:00:00',
|
|
90
|
-
device_model: 'web',
|
|
91
|
-
grant_type: 'access_token',
|
|
92
|
-
third_name: 'huami'
|
|
93
|
-
})];
|
|
94
|
-
case 2:
|
|
95
|
-
loginInfo = (_a.sent()).data;
|
|
96
|
-
return [2 /*return*/, loginInfo];
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
}); };
|
|
100
|
-
exports.loginByLocal = loginByLocal;
|
|
101
|
-
var getUserInfo = function (host, userid, apptoken) { return __awaiter(void 0, void 0, void 0, function () {
|
|
102
|
-
var userInfo, data, error_1;
|
|
103
|
-
return __generator(this, function (_a) {
|
|
104
|
-
switch (_a.label) {
|
|
105
|
-
case 0:
|
|
106
|
-
_a.trys.push([0, 2, , 3]);
|
|
107
|
-
return [4 /*yield*/, axios_1["default"].get("https://".concat(host, "/v1/soc/user/").concat(userid), {
|
|
108
|
-
headers: {
|
|
109
|
-
app_token: apptoken,
|
|
110
|
-
'Content-Type': 'application/json',
|
|
111
|
-
user_id: userid,
|
|
112
|
-
app_name: 'com.huami.webapp'
|
|
113
|
-
}
|
|
114
|
-
})];
|
|
115
|
-
case 1:
|
|
116
|
-
userInfo = _a.sent();
|
|
117
|
-
data = userInfo.data.data;
|
|
118
|
-
return [2 /*return*/, data];
|
|
119
|
-
case 2:
|
|
120
|
-
error_1 = _a.sent();
|
|
121
|
-
return [3 /*break*/, 3];
|
|
122
|
-
case 3: return [2 /*return*/];
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}); };
|
|
126
|
-
exports.getUserInfo = getUserInfo;
|