hunter-open-sdk 2.0.0-beta.26 → 2.0.0-beta.29
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/abilities/eventManager/index.js +25 -16
- package/lib/abilities/getAndroidReport/index.js +60 -0
- package/lib/abilities/getAndroidReport/worker.js +21 -0
- package/lib/abilities/getAndroidSn/index.js +74 -52
- package/lib/abilities/getUltimateReport/index.js +59 -0
- package/lib/abilities/getUltimateReport/worker.js +21 -0
- package/lib/constants/index.js +28 -0
- package/lib/index.d.ts +20 -3
- package/lib/index.js +16 -0
- package/lib/resources/dll/{libinspectionkit_x64_0.5.2.dll → libinspectionkit_x64_0.6.1.dll} +0 -0
- package/lib/resources/dylib/{libinspectionkit_amd64_0.5.2.dylib → libinspectionkit_amd64_0.6.1.dylib} +0 -0
- package/lib/resources/dylib/{libinspectionkit_arm64_0.5.2.dylib → libinspectionkit_arm64_0.6.1.dylib} +0 -0
- package/lib/resources/version.online +1 -1
- package/lib/utils/utils.sn.js +14 -13
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ var _request = _interopRequireDefault(require("request"));
|
|
|
10
10
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
11
|
var Sentry = _interopRequireWildcard(require("@sentry/browser"));
|
|
12
12
|
var _utils = require("../../utils/utils.env");
|
|
13
|
+
var _constants = require("../../constants");
|
|
13
14
|
var _utils2 = require("../../utils/utils.common");
|
|
14
15
|
var _winDriver = require("../../events/driver/winDriver");
|
|
15
16
|
var _utils3 = require("../../utils/utils.global");
|
|
@@ -111,7 +112,7 @@ const DevicePair = async (udid = '', params) => {
|
|
|
111
112
|
const callBack = () => {
|
|
112
113
|
saasCallBack({
|
|
113
114
|
data: {
|
|
114
|
-
eventName:
|
|
115
|
+
eventName: _constants.EVENT_TYPE.TRUST_RESULT,
|
|
115
116
|
udid,
|
|
116
117
|
eventCode: 0
|
|
117
118
|
}
|
|
@@ -146,7 +147,7 @@ const writeDllVersion = version => {
|
|
|
146
147
|
if (err) {
|
|
147
148
|
saasCallBack({
|
|
148
149
|
data: {
|
|
149
|
-
eventName:
|
|
150
|
+
eventName: _constants.EVENT_TYPE.UPDATE_RESULT,
|
|
150
151
|
eventCode: -1 // eventCode 0 更新成功 -1 更新失败
|
|
151
152
|
}
|
|
152
153
|
});
|
|
@@ -157,7 +158,7 @@ const writeDllVersion = version => {
|
|
|
157
158
|
(0, _utils4.initHunterInspectionKit)();
|
|
158
159
|
saasCallBack({
|
|
159
160
|
data: {
|
|
160
|
-
eventName:
|
|
161
|
+
eventName: _constants.EVENT_TYPE.UPDATE_RESULT,
|
|
161
162
|
eventCode: 0 // eventCode 0 更新成功 -1 更新失败
|
|
162
163
|
}
|
|
163
164
|
});
|
|
@@ -181,7 +182,7 @@ const updateDll = (packageUrl, targetVersion) => {
|
|
|
181
182
|
if (err) {
|
|
182
183
|
saasCallBack({
|
|
183
184
|
data: {
|
|
184
|
-
eventName:
|
|
185
|
+
eventName: _constants.EVENT_TYPE.UPDATE_RESULT,
|
|
185
186
|
eventCode: -1 // eventCode 0 更新成功 -1 更新失败
|
|
186
187
|
}
|
|
187
188
|
});
|
|
@@ -223,7 +224,7 @@ const updateDllFileCheck = () => {
|
|
|
223
224
|
isHot == 1 && updateDll(url, targetVersion);
|
|
224
225
|
saasCallBack({
|
|
225
226
|
data: {
|
|
226
|
-
eventName:
|
|
227
|
+
eventName: _constants.EVENT_TYPE.NEED_UPDATE,
|
|
227
228
|
eventCode: isHot == 1 ? 0 : -1 // eventCode 0 需要更新 -1 不需要更新
|
|
228
229
|
}
|
|
229
230
|
});
|
|
@@ -231,7 +232,7 @@ const updateDllFileCheck = () => {
|
|
|
231
232
|
// 错误的时候不需要更新
|
|
232
233
|
saasCallBack({
|
|
233
234
|
data: {
|
|
234
|
-
eventName:
|
|
235
|
+
eventName: _constants.EVENT_TYPE.NEED_UPDATE,
|
|
235
236
|
eventCode: -1 // eventCode 0 需要更新 -1 不需要更新
|
|
236
237
|
}
|
|
237
238
|
});
|
|
@@ -256,7 +257,7 @@ const checkAndInstallDriver = () => {
|
|
|
256
257
|
(0, _winDriver.downloadDriver)(percent => {
|
|
257
258
|
saasCallBack({
|
|
258
259
|
data: {
|
|
259
|
-
eventName:
|
|
260
|
+
eventName: _constants.EVENT_TYPE.NEED_INSTALL_DRIVER,
|
|
260
261
|
eventCode: 0,
|
|
261
262
|
eventContent: JSON.stringify({
|
|
262
263
|
percent // 下载进度
|
|
@@ -268,7 +269,7 @@ const checkAndInstallDriver = () => {
|
|
|
268
269
|
console.log('驱动下载并安装成功');
|
|
269
270
|
saasCallBack({
|
|
270
271
|
data: {
|
|
271
|
-
eventName:
|
|
272
|
+
eventName: _constants.EVENT_TYPE.INSTALL_DRIVER_RESULT,
|
|
272
273
|
eventCode: 0 // 0 成功 -1 失败
|
|
273
274
|
}
|
|
274
275
|
});
|
|
@@ -279,7 +280,7 @@ const checkAndInstallDriver = () => {
|
|
|
279
280
|
Sentry.captureException('驱动下载或安装失败:' + JSON.stringify(err));
|
|
280
281
|
saasCallBack({
|
|
281
282
|
data: {
|
|
282
|
-
eventName:
|
|
283
|
+
eventName: _constants.EVENT_TYPE.INSTALL_DRIVER_RESULT,
|
|
283
284
|
eventCode: -1 // 0 成功 -1 失败
|
|
284
285
|
}
|
|
285
286
|
});
|
|
@@ -305,7 +306,7 @@ const registerEvent = async (params, callBack) => {
|
|
|
305
306
|
// 插入设备通知
|
|
306
307
|
saasCallBack({
|
|
307
308
|
data: {
|
|
308
|
-
eventName:
|
|
309
|
+
eventName: _constants.EVENT_TYPE.USB_DEVICE_RESULT,
|
|
309
310
|
udid,
|
|
310
311
|
eventCode: 0
|
|
311
312
|
}
|
|
@@ -317,17 +318,25 @@ const registerEvent = async (params, callBack) => {
|
|
|
317
318
|
// 拔出设备
|
|
318
319
|
saasCallBack({
|
|
319
320
|
data: {
|
|
320
|
-
eventName:
|
|
321
|
+
eventName: _constants.EVENT_TYPE.USB_DISCONNECT,
|
|
321
322
|
udid,
|
|
322
|
-
eventCode:
|
|
323
|
+
eventCode: 0
|
|
323
324
|
}
|
|
324
325
|
});
|
|
325
326
|
_deviceHelper.deviceHelper.removeUdid(udid);
|
|
326
327
|
}).on('error', function (err) {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
328
|
+
const errStr = 'usb连接错误:' + JSON.stringify(err);
|
|
329
|
+
console.log(errStr);
|
|
330
|
+
Sentry.captureException(errStr);
|
|
331
|
+
saasCallBack({
|
|
332
|
+
data: {
|
|
333
|
+
eventName: _constants.EVENT_TYPE.USB_ERROR,
|
|
334
|
+
eventCode: -1,
|
|
335
|
+
eventContent: JSON.stringify({
|
|
336
|
+
message: errStr
|
|
337
|
+
})
|
|
338
|
+
}
|
|
339
|
+
});
|
|
331
340
|
});
|
|
332
341
|
};
|
|
333
342
|
exports.registerEvent = registerEvent;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAndroidReport = getAndroidReport;
|
|
7
|
+
var _webWorker = _interopRequireDefault(require("web-worker"));
|
|
8
|
+
var _url = _interopRequireDefault(require("url"));
|
|
9
|
+
var _utils = require("../../utils/utils.common");
|
|
10
|
+
var _utils2 = require("../../utils/utils.path");
|
|
11
|
+
var _utils3 = require("../../utils/utils.ability");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
class GetAndroidReport {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.initWorker();
|
|
16
|
+
this.initWorkerListener();
|
|
17
|
+
}
|
|
18
|
+
worker = null;
|
|
19
|
+
callback = null;
|
|
20
|
+
exec(payload, callback) {
|
|
21
|
+
this.callback = typeof callback === 'function' ? callback : _utils3.defaultCallback;
|
|
22
|
+
this.worker && this.worker.postMessage({
|
|
23
|
+
payload
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
initWorkerListener() {
|
|
27
|
+
this.worker && this.worker.addEventListener('message', event => {
|
|
28
|
+
console.log('GetAndroidReport', event);
|
|
29
|
+
const {
|
|
30
|
+
payload
|
|
31
|
+
} = event.data;
|
|
32
|
+
this.callback(payload);
|
|
33
|
+
this.callback = null;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
initWorker() {
|
|
37
|
+
if (!this.worker) {
|
|
38
|
+
const workerPath = new _url.default.URL('file://' + (0, _utils2.convertPathWithCurrentEnv)(__dirname, './worker.js'));
|
|
39
|
+
this.worker = new _webWorker.default(workerPath, {
|
|
40
|
+
type: 'module'
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let entity = null;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 获取Android设备报告
|
|
49
|
+
* @param {Object} params - 请求参数
|
|
50
|
+
* @param {string} params.imei - 设备IMEI
|
|
51
|
+
* @param {string} params.brandCode - 品牌编码
|
|
52
|
+
* @param {Function} callback - 回调函数,接收报告结果
|
|
53
|
+
*/
|
|
54
|
+
function getAndroidReport(params, callback) {
|
|
55
|
+
if (!entity) {
|
|
56
|
+
entity = new GetAndroidReport();
|
|
57
|
+
}
|
|
58
|
+
const payload = (0, _utils.parsePayload)(params);
|
|
59
|
+
entity.exec(payload, callback);
|
|
60
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
initWorkerNodePath
|
|
5
|
+
} = require("../../utils/utils.worker");
|
|
6
|
+
|
|
7
|
+
// 先注册NodePath后才能正常使用node包,请勿挪动位置
|
|
8
|
+
initWorkerNodePath();
|
|
9
|
+
const {
|
|
10
|
+
abilityCallKit
|
|
11
|
+
} = require("../../utils/utils.global");
|
|
12
|
+
|
|
13
|
+
// 处理主进程消息
|
|
14
|
+
function onMainMessage(event) {
|
|
15
|
+
const {
|
|
16
|
+
payload
|
|
17
|
+
} = event.data;
|
|
18
|
+
const res = abilityCallKit('android_report', payload);
|
|
19
|
+
postMessage(res);
|
|
20
|
+
}
|
|
21
|
+
addEventListener('message', onMainMessage);
|
|
@@ -8,10 +8,10 @@ var _usb = require("usb");
|
|
|
8
8
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
9
9
|
var _utils = require("../../utils/utils.env");
|
|
10
10
|
var _utils2 = require("../../utils/utils.sn");
|
|
11
|
+
var _constants = require("../../constants");
|
|
11
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
13
|
const exec = _child_process.default.exec;
|
|
13
14
|
let hadRegisterUsb = false; // 是否已经注册过usb事件
|
|
14
|
-
let isPause = false; // 是否暂停获取sn
|
|
15
15
|
|
|
16
16
|
// mac获取sn
|
|
17
17
|
const getMacSn = async (device, callBack) => {
|
|
@@ -29,36 +29,44 @@ const getMacSn = async (device, callBack) => {
|
|
|
29
29
|
const currentDevice = deviceList.filter(item => item.device.deviceAddress == attachDeviceId);
|
|
30
30
|
if (!currentDevice.length) {
|
|
31
31
|
callBack({
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
data: {
|
|
33
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
34
|
+
eventCode: -1,
|
|
35
|
+
message: '获取SN失败'
|
|
36
|
+
}
|
|
35
37
|
});
|
|
36
|
-
return;
|
|
38
|
+
return '';
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
// 检查设备是否为支持的三星、华为、荣耀手机品牌
|
|
40
42
|
const deviceInfo = currentDevice[0];
|
|
41
43
|
const productName = deviceInfo.productName?.toLowerCase() || '';
|
|
42
44
|
const manufacturerName = deviceInfo.manufacturerName?.toLowerCase() || '';
|
|
43
|
-
|
|
44
|
-
// 支持的三星、华为、荣耀品牌关键词
|
|
45
|
-
const supportedBrands = ['samsung', 'galaxy', 'huawei', 'honor', 'honor magic'];
|
|
46
|
-
const isSupportedBrand = supportedBrands.some(brand => productName.includes(brand) || manufacturerName.includes(brand));
|
|
45
|
+
const isSupportedBrand = _utils2.SUPPORT_PHONE_BRANDS.some(brand => productName.includes(brand) || manufacturerName.includes(brand));
|
|
47
46
|
if (!isSupportedBrand) {
|
|
48
47
|
callBack({
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
data: {
|
|
49
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
50
|
+
eventCode: -1,
|
|
51
|
+
message: '暂不支持该品牌手机查询SN'
|
|
52
|
+
}
|
|
52
53
|
});
|
|
53
|
-
return;
|
|
54
|
+
return '';
|
|
54
55
|
}
|
|
56
|
+
const sn = currentDevice[0].serialNumber;
|
|
57
|
+
const brand = deviceInfo.manufacturerName?.replace(/\s*/g, '') || '';
|
|
55
58
|
callBack({
|
|
56
|
-
code: 0,
|
|
57
59
|
data: {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
61
|
+
eventCode: 0,
|
|
62
|
+
eventContent: {
|
|
63
|
+
SN: sn,
|
|
64
|
+
brand
|
|
65
|
+
},
|
|
66
|
+
message: '获取SN成功'
|
|
67
|
+
}
|
|
61
68
|
});
|
|
69
|
+
return sn;
|
|
62
70
|
};
|
|
63
71
|
|
|
64
72
|
// win获取sn
|
|
@@ -69,47 +77,60 @@ const getWinSn = async (device, callBack) => {
|
|
|
69
77
|
if (err) {
|
|
70
78
|
// 运行失败 则直接返回获取失败
|
|
71
79
|
callBack({
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
data: {
|
|
81
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
82
|
+
eventCode: -1,
|
|
83
|
+
message: `windows运行程序获取SN失败err: ${err}`
|
|
84
|
+
}
|
|
75
85
|
});
|
|
76
|
-
return;
|
|
86
|
+
return '';
|
|
77
87
|
}
|
|
78
88
|
if (stderr) {
|
|
79
89
|
// 运行失败 则直接返回获取失败
|
|
80
90
|
callBack({
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
91
|
+
data: {
|
|
92
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
93
|
+
eventCode: -1,
|
|
94
|
+
message: `windows运行程序获取SN失败stderr: ${stderr}`
|
|
95
|
+
}
|
|
84
96
|
});
|
|
85
|
-
return;
|
|
97
|
+
return '';
|
|
86
98
|
}
|
|
87
99
|
|
|
88
100
|
// 处理WMIC输出并提取手机序列号
|
|
89
101
|
const phoneDevices = (0, _utils2.parseWmicOutput)(stdout);
|
|
90
102
|
if (phoneDevices.length === 0) {
|
|
91
103
|
callBack({
|
|
92
|
-
code: -1,
|
|
93
|
-
data: {},
|
|
94
|
-
message: `暂不支持该品牌手机查询SN`
|
|
95
|
-
});
|
|
96
|
-
} else {
|
|
97
|
-
console.log('检测到的手机设备:');
|
|
98
|
-
const sn = phoneDevices[0].serial;
|
|
99
|
-
callBack({
|
|
100
|
-
code: 0,
|
|
101
104
|
data: {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
106
|
+
eventCode: -1,
|
|
107
|
+
message: `暂不支持该品牌手机查询SN`
|
|
108
|
+
}
|
|
105
109
|
});
|
|
106
|
-
|
|
107
|
-
// console.log(`设备名称: ${device.name}`);
|
|
108
|
-
// console.log(`序列号: ${device.serial}`);
|
|
109
|
-
// console.log(`PNPDeviceID: ${device.pnpDeviceId}`);
|
|
110
|
-
// console.log('---');
|
|
111
|
-
// });
|
|
110
|
+
return '';
|
|
112
111
|
}
|
|
112
|
+
console.log('检测到的手机设备:');
|
|
113
|
+
const sn = phoneDevices[0].serial;
|
|
114
|
+
const brand = phoneDevices[0].name?.replace(/\s*/g, '') || '';
|
|
115
|
+
callBack({
|
|
116
|
+
data: {
|
|
117
|
+
eventName: _constants.EVENT_TYPE.GET_ANDROID_SN_RESULT,
|
|
118
|
+
eventCode: 0,
|
|
119
|
+
eventContent: {
|
|
120
|
+
SN: sn,
|
|
121
|
+
brand
|
|
122
|
+
},
|
|
123
|
+
message: `获取SN成功`
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// phoneDevices.forEach(device => {
|
|
127
|
+
// console.log(`设备名称: ${device.name}`);
|
|
128
|
+
// console.log(`序列号: ${device.serial}`);
|
|
129
|
+
// console.log(`PNPDeviceID: ${device.pnpDeviceId}`);
|
|
130
|
+
// console.log('---');
|
|
131
|
+
// });
|
|
132
|
+
|
|
133
|
+
return sn;
|
|
113
134
|
});
|
|
114
135
|
};
|
|
115
136
|
|
|
@@ -120,14 +141,10 @@ const getWinSn = async (device, callBack) => {
|
|
|
120
141
|
*/
|
|
121
142
|
const registerGetAndroidSn = (params, callBack) => {
|
|
122
143
|
if (hadRegisterUsb) {
|
|
123
|
-
isPause = false;
|
|
124
144
|
return;
|
|
125
145
|
}
|
|
126
146
|
hadRegisterUsb = true;
|
|
127
147
|
_usb.usb.on('attach', async device => {
|
|
128
|
-
if (isPause) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
148
|
const {
|
|
132
149
|
idVendor
|
|
133
150
|
} = device.deviceDescriptor;
|
|
@@ -137,7 +154,7 @@ const registerGetAndroidSn = (params, callBack) => {
|
|
|
137
154
|
}
|
|
138
155
|
callBack({
|
|
139
156
|
data: {
|
|
140
|
-
eventName:
|
|
157
|
+
eventName: _constants.EVENT_TYPE.USB_ANDROID_DEVICE_RESULT,
|
|
141
158
|
eventCode: 0
|
|
142
159
|
}
|
|
143
160
|
});
|
|
@@ -153,13 +170,18 @@ const registerGetAndroidSn = (params, callBack) => {
|
|
|
153
170
|
}
|
|
154
171
|
});
|
|
155
172
|
_usb.usb.on('detach', () => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
173
|
+
callBack({
|
|
174
|
+
data: {
|
|
175
|
+
eventName: _constants.EVENT_TYPE.USB_DISCONNECT,
|
|
176
|
+
eventCode: 0
|
|
177
|
+
}
|
|
178
|
+
});
|
|
159
179
|
});
|
|
160
180
|
};
|
|
161
181
|
exports.registerGetAndroidSn = registerGetAndroidSn;
|
|
162
182
|
const unregisterGetAndroidSn = () => {
|
|
163
|
-
|
|
183
|
+
hadRegisterUsb = false;
|
|
184
|
+
_usb.usb.removeAllListeners('attach');
|
|
185
|
+
_usb.usb.removeAllListeners('detach');
|
|
164
186
|
};
|
|
165
187
|
exports.unregisterGetAndroidSn = unregisterGetAndroidSn;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getUltimateReport = getUltimateReport;
|
|
7
|
+
var _webWorker = _interopRequireDefault(require("web-worker"));
|
|
8
|
+
var _url = _interopRequireDefault(require("url"));
|
|
9
|
+
var _utils = require("../../utils/utils.common");
|
|
10
|
+
var _utils2 = require("../../utils/utils.path");
|
|
11
|
+
var _utils3 = require("../../utils/utils.ability");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
class GetUltimateReport {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.initWorker();
|
|
16
|
+
this.initWorkerListener();
|
|
17
|
+
}
|
|
18
|
+
worker = null;
|
|
19
|
+
callback = null;
|
|
20
|
+
exec(payload, callback) {
|
|
21
|
+
this.callback = typeof callback === 'function' ? callback : _utils3.defaultCallback;
|
|
22
|
+
this.worker && this.worker.postMessage({
|
|
23
|
+
payload
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
initWorkerListener() {
|
|
27
|
+
this.worker && this.worker.addEventListener('message', event => {
|
|
28
|
+
const {
|
|
29
|
+
payload
|
|
30
|
+
} = event.data;
|
|
31
|
+
this.callback(payload);
|
|
32
|
+
this.callback = null;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
initWorker() {
|
|
36
|
+
if (!this.worker) {
|
|
37
|
+
const workerPath = new _url.default.URL('file://' + (0, _utils2.convertPathWithCurrentEnv)(__dirname, './worker.js'));
|
|
38
|
+
this.worker = new _webWorker.default(workerPath, {
|
|
39
|
+
type: 'module'
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let entity = null;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 获取终极报告
|
|
48
|
+
* @param {Object} params - 请求参数
|
|
49
|
+
* @param {string} params.udid - 设备 UDID
|
|
50
|
+
* @param {string} [params.simpleReportId] - 普通报告 ID,传空串时服务端不进行删除操作
|
|
51
|
+
* @param {Function} callback - 回调函数,接收报告结果
|
|
52
|
+
*/
|
|
53
|
+
function getUltimateReport(params, callback) {
|
|
54
|
+
if (!entity) {
|
|
55
|
+
entity = new GetUltimateReport();
|
|
56
|
+
}
|
|
57
|
+
const payload = (0, _utils.parsePayload)(params);
|
|
58
|
+
entity.exec(payload, callback);
|
|
59
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
initWorkerNodePath
|
|
5
|
+
} = require("../../utils/utils.worker");
|
|
6
|
+
|
|
7
|
+
// 先注册NodePath后才能正常使用node包,请勿挪动位置
|
|
8
|
+
initWorkerNodePath();
|
|
9
|
+
const {
|
|
10
|
+
abilityCallKit
|
|
11
|
+
} = require("../../utils/utils.global");
|
|
12
|
+
|
|
13
|
+
// 处理主进程消息
|
|
14
|
+
function onMainMessage(event) {
|
|
15
|
+
const {
|
|
16
|
+
payload
|
|
17
|
+
} = event.data;
|
|
18
|
+
const res = abilityCallKit('ultimate_report', payload);
|
|
19
|
+
postMessage(res);
|
|
20
|
+
}
|
|
21
|
+
addEventListener('message', onMainMessage);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EVENT_TYPE = void 0;
|
|
7
|
+
const EVENT_TYPE = exports.EVENT_TYPE = {
|
|
8
|
+
/** iOS 设备 USB 插拔结果:eventCode 0 已插入,-1 已拔出 */
|
|
9
|
+
USB_DEVICE_RESULT: 'type_usb_device_result',
|
|
10
|
+
/** iOS 设备信任配对结果:eventCode 0 已信任 */
|
|
11
|
+
TRUST_RESULT: 'type_trust_result',
|
|
12
|
+
/** 检测到 dll 热更新:eventCode 0 需要更新,-1 不需要更新 */
|
|
13
|
+
NEED_UPDATE: 'type_need_update',
|
|
14
|
+
/** dll 热更新下载并写入结果:eventCode 0 成功,-1 失败 */
|
|
15
|
+
UPDATE_RESULT: 'type_update_result',
|
|
16
|
+
/** 需要安装 USB 驱动(仅 Windows),eventContent.percent 为下载进度 */
|
|
17
|
+
NEED_INSTALL_DRIVER: 'type_need_install_driver',
|
|
18
|
+
/** USB 驱动安装结果(仅 Windows):eventCode 0 成功,-1 失败 */
|
|
19
|
+
INSTALL_DRIVER_RESULT: 'type_install_driver_result',
|
|
20
|
+
/** Android 设备 USB 插入结果:eventCode 0 已插入 */
|
|
21
|
+
USB_ANDROID_DEVICE_RESULT: 'type_usb_android_device_result',
|
|
22
|
+
/** 获取 Android SN 结果:eventCode 0 成功,-1 失败;成功时 eventContent: { SN, brand } */
|
|
23
|
+
GET_ANDROID_SN_RESULT: 'type_get_android_sn_result',
|
|
24
|
+
/** 设备 USB 断开(iOS / Android):eventCode 0 已拔出 */
|
|
25
|
+
USB_DISCONNECT: 'type_usb_disconnect',
|
|
26
|
+
/** USB 监听发生错误:eventCode -1,eventContent.message 为错误信息 */
|
|
27
|
+
USB_ERROR: 'type_usb_error'
|
|
28
|
+
};
|
package/lib/index.d.ts
CHANGED
|
@@ -8,9 +8,12 @@ export interface CallbackResult {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export interface SnCallbackResult {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
data: {
|
|
12
|
+
eventName: string
|
|
13
|
+
eventCode: number
|
|
14
|
+
eventContent?: { SN: string; brand: string }
|
|
15
|
+
message?: string
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
export interface GetGeneralReportOptions {
|
|
@@ -27,7 +30,19 @@ export declare function unregisterEvent(): void
|
|
|
27
30
|
export declare function registerGetAndroidSn(params: any, callback: SnCallback): void
|
|
28
31
|
export declare function unregisterGetAndroidSn(): void
|
|
29
32
|
export declare function getSaaSReport(params: any, callback?: ReportCallback): void
|
|
33
|
+
export interface AndroidReportParams {
|
|
34
|
+
imei: string
|
|
35
|
+
brandCode: string
|
|
36
|
+
}
|
|
37
|
+
|
|
30
38
|
export declare function getGeneralReport(params: any, callback?: ReportCallback, options?: GetGeneralReportOptions): void
|
|
39
|
+
export interface UltimateReportParams {
|
|
40
|
+
udid: string
|
|
41
|
+
simpleReportId?: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export declare function getAndroidReport(params: AndroidReportParams, callback?: ReportCallback): void
|
|
45
|
+
export declare function getUltimateReport(params: UltimateReportParams, callback?: ReportCallback): void
|
|
31
46
|
export declare function erase(params: any, callback?: ReportCallback): void
|
|
32
47
|
export declare function activate(params: any, callback?: ReportCallback): void
|
|
33
48
|
export declare function skip(params: any, callback?: ReportCallback): void
|
|
@@ -42,6 +57,8 @@ declare const sdk: {
|
|
|
42
57
|
unregisterGetAndroidSn: typeof unregisterGetAndroidSn
|
|
43
58
|
getSaaSReport: typeof getSaaSReport
|
|
44
59
|
getGeneralReport: typeof getGeneralReport
|
|
60
|
+
getAndroidReport: typeof getAndroidReport
|
|
61
|
+
getUltimateReport: typeof getUltimateReport
|
|
45
62
|
erase: typeof erase
|
|
46
63
|
activate: typeof activate
|
|
47
64
|
skip: typeof skip
|
package/lib/index.js
CHANGED
|
@@ -16,6 +16,12 @@ Object.defineProperty(exports, "erase", {
|
|
|
16
16
|
return _erase.erase;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
+
Object.defineProperty(exports, "getAndroidReport", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () {
|
|
22
|
+
return _getAndroidReport.getAndroidReport;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
19
25
|
Object.defineProperty(exports, "getGeneralReport", {
|
|
20
26
|
enumerable: true,
|
|
21
27
|
get: function () {
|
|
@@ -28,6 +34,12 @@ Object.defineProperty(exports, "getSaaSReport", {
|
|
|
28
34
|
return _getSaaSReport.getSaaSReport;
|
|
29
35
|
}
|
|
30
36
|
});
|
|
37
|
+
Object.defineProperty(exports, "getUltimateReport", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function () {
|
|
40
|
+
return _getUltimateReport.getUltimateReport;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
31
43
|
Object.defineProperty(exports, "installApp", {
|
|
32
44
|
enumerable: true,
|
|
33
45
|
get: function () {
|
|
@@ -80,6 +92,8 @@ var _getAndroidSn = require("./abilities/getAndroidSn");
|
|
|
80
92
|
var _eventManager = require("./abilities/eventManager");
|
|
81
93
|
var _getSaaSReport = require("./abilities/getSaaSReport");
|
|
82
94
|
var _getGeneralReport = require("./abilities/getGeneralReport");
|
|
95
|
+
var _getAndroidReport = require("./abilities/getAndroidReport");
|
|
96
|
+
var _getUltimateReport = require("./abilities/getUltimateReport");
|
|
83
97
|
var _erase = require("./abilities/erase");
|
|
84
98
|
var _activate = require("./abilities/activate");
|
|
85
99
|
var _skip = require("./abilities/skip");
|
|
@@ -102,6 +116,8 @@ var _default = exports.default = {
|
|
|
102
116
|
unregisterGetAndroidSn: _getAndroidSn.unregisterGetAndroidSn,
|
|
103
117
|
getSaaSReport: _getSaaSReport.getSaaSReport,
|
|
104
118
|
getGeneralReport: _getGeneralReport.getGeneralReport,
|
|
119
|
+
getAndroidReport: _getAndroidReport.getAndroidReport,
|
|
120
|
+
getUltimateReport: _getUltimateReport.getUltimateReport,
|
|
105
121
|
erase: _erase.erase,
|
|
106
122
|
activate: _activate.activate,
|
|
107
123
|
skip: _skip.skip,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.6.1
|
package/lib/utils/utils.sn.js
CHANGED
|
@@ -3,7 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.SUPPORT_PHONE_VENDORS = exports.SUPPORT_PHONE_BRANDS = void 0;
|
|
6
7
|
exports.parseWmicOutput = parseWmicOutput;
|
|
8
|
+
// 只支持三星、荣耀、华为的手机设备关键词
|
|
9
|
+
const SUPPORT_PHONE_BRANDS = exports.SUPPORT_PHONE_BRANDS = ['samsung', 'galaxy', 'huawei', 'honor', 'honor magic'];
|
|
10
|
+
|
|
11
|
+
// 只支持三星、荣耀、华为的手机厂商VID
|
|
12
|
+
const SUPPORT_PHONE_VENDORS = exports.SUPPORT_PHONE_VENDORS = ['VID_04E8',
|
|
13
|
+
// Samsung
|
|
14
|
+
'VID_12D1',
|
|
15
|
+
// Huawei
|
|
16
|
+
'VID_2A45' // Honor (OnePlus VID,但荣耀也使用此VID)
|
|
17
|
+
];
|
|
18
|
+
|
|
7
19
|
/**
|
|
8
20
|
* 判断设备是否为手机设备
|
|
9
21
|
* @param {Object} device - 设备信息
|
|
@@ -13,22 +25,11 @@ function isPhoneDevice(device) {
|
|
|
13
25
|
const name = device.name.toLowerCase();
|
|
14
26
|
const pnpId = device.pnpDeviceId.toLowerCase();
|
|
15
27
|
|
|
16
|
-
// 只支持三星、荣耀、华为的手机设备关键词
|
|
17
|
-
const phoneKeywords = ['samsung', 'galaxy', 'huawei', 'honor', 'honor magic'];
|
|
18
|
-
|
|
19
|
-
// 只支持三星、荣耀、华为的手机厂商VID
|
|
20
|
-
const phoneVendors = ['VID_04E8',
|
|
21
|
-
// Samsung
|
|
22
|
-
'VID_12D1',
|
|
23
|
-
// Huawei
|
|
24
|
-
'VID_2A45' // Honor (OnePlus VID,但荣耀也使用此VID)
|
|
25
|
-
];
|
|
26
|
-
|
|
27
28
|
// 检查名称中是否包含手机关键词
|
|
28
|
-
const isPhoneByName =
|
|
29
|
+
const isPhoneByName = SUPPORT_PHONE_BRANDS.some(keyword => name.includes(keyword));
|
|
29
30
|
|
|
30
31
|
// 检查PNPDeviceID中是否包含手机厂商VID
|
|
31
|
-
const isPhoneByVendor =
|
|
32
|
+
const isPhoneByVendor = SUPPORT_PHONE_VENDORS.some(vendor => pnpId.includes(vendor.toLowerCase()));
|
|
32
33
|
return isPhoneByName || isPhoneByVendor;
|
|
33
34
|
}
|
|
34
35
|
|