assistsx-js 0.1.42 → 0.2.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/README.md +4 -4
- package/dist/index.cjs +361 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +119 -2
- package/dist/index.d.ts +119 -2
- package/dist/index.global.js +9 -13
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +356 -23
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/{AssistsXAsync.ts → assistsx-async.ts} +8 -8
- package/src/{AssistsX.ts → assistsx.ts} +8 -8
- package/src/barutils/bar-utils.ts +3 -3
- package/src/filesystem/fileio/file-io.ts +2 -2
- package/src/filesystem/fileutils/file-utils.ts +2 -2
- package/src/filesystem/path.ts +2 -2
- package/src/floatingwindow/float.ts +4 -4
- package/src/gallery/gallery.ts +2 -2
- package/src/global.d.ts +6 -1
- package/src/imageutils/image-utils.ts +2 -2
- package/src/ime/ime.ts +2 -2
- package/src/index.ts +21 -20
- package/src/log/log-call-method.ts +28 -0
- package/src/log/log.ts +445 -0
- package/src/mlkit/mlkit.ts +3 -3
- package/src/network/http.ts +2 -2
- package/src/{NodeAsync.ts → node-async.ts} +5 -5
- package/src/{Node.ts → node.ts} +5 -5
- package/src/{StepAsync.ts → step-async.ts} +8 -8
- package/src/{Step.ts → step.ts} +10 -10
- /package/src/{AccessibilityEventFilter.ts → accessibility-event-filter.ts} +0 -0
- /package/src/{AppInfo.ts → app-info.ts} +0 -0
- /package/src/barutils/{BarUtilsCallMethod.ts → bar-utils-call-method.ts} +0 -0
- /package/src/{Bounds.ts → bounds.ts} +0 -0
- /package/src/{CallMethod.ts → call-method.ts} +0 -0
- /package/src/{CallResponse.ts → call-response.ts} +0 -0
- /package/src/{DeviceInfo.ts → device-info.ts} +0 -0
- /package/src/floatingwindow/{FloatCallMethod.ts → float-call-method.ts} +0 -0
- /package/src/mlkit/{MlkitCallMethod.ts → mlkit-call-method.ts} +0 -0
- /package/src/{NodeClassValue.ts → node-class-value.ts} +0 -0
- /package/src/{StepError.ts → step-error.ts} +0 -0
- /package/src/{StepStateStore.ts → step-state-store.ts} +0 -0
- /package/src/{Utils.ts → utils.ts} +0 -0
- /package/src/{WindowFlags.ts → window-flags.ts} +0 -0
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
一个支持通过Web端实现Android平台自动化脚本的JS库,支持元素节点查找、获取节点文本、节点截图、执行手势动作、提供步骤器实现复杂自动化业务等一系列自动化脚本开发能力支持
|
|
4
4
|
|
|
5
5
|
# AssistsX JS运行平台
|
|
6
|
-
开发的自动化脚本需要运行在Android端[AssistsX](https://www.pgyer.com/
|
|
6
|
+
开发的自动化脚本需要运行在Android端[AssistsX](https://www.pgyer.com/assistsx)中,所以开发前需要先在手机安装[AssistsX](https://www.pgyer.com/assistsx)
|
|
7
7
|
|
|
8
8
|
**扫码下载**
|
|
9
9
|
|
|
10
|
-
<img width="112" alt="image" src="https://github.com/user-attachments/assets/
|
|
10
|
+
<img width="112" alt="image" src="https://github.com/user-attachments/assets/6c371313-4ca1-4598-91b3-f716ec369e7b" />
|
|
11
11
|
|
|
12
|
-
**下载链接:[https://www.pgyer.com/
|
|
12
|
+
**下载链接:[https://www.pgyer.com/assistsx](https://www.pgyer.com/assistsx)**
|
|
13
13
|
|
|
14
14
|
> 下载安装后会默认安装一个示例插件,可长按删除
|
|
15
15
|
|
|
@@ -80,7 +80,7 @@ const handleClick = () => {
|
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
## 4. 加载插件
|
|
83
|
-
1. 通过[AssistsX](https://www.pgyer.com/
|
|
83
|
+
1. 通过[AssistsX](https://www.pgyer.com/assistsx)局域网加载插件
|
|
84
84
|
> 加载插件前需要配置项目允许局域网访问,在文件`vite.config.js`添加以下配置
|
|
85
85
|
```
|
|
86
86
|
export default defineConfig({
|
package/dist/index.cjs
CHANGED
|
@@ -39,6 +39,9 @@ __export(index_exports, {
|
|
|
39
39
|
ImageUtils: () => ImageUtils,
|
|
40
40
|
Ime: () => Ime,
|
|
41
41
|
ImeAction: () => ImeAction,
|
|
42
|
+
Log: () => Log,
|
|
43
|
+
LogCallMethod: () => LogCallMethod,
|
|
44
|
+
LogStream: () => LogStream,
|
|
42
45
|
Mlkit: () => Mlkit,
|
|
43
46
|
MlkitCallMethod: () => MlkitCallMethod,
|
|
44
47
|
Node: () => Node,
|
|
@@ -62,6 +65,8 @@ __export(index_exports, {
|
|
|
62
65
|
http: () => http,
|
|
63
66
|
imageUtils: () => imageUtils,
|
|
64
67
|
ime: () => ime,
|
|
68
|
+
log: () => log,
|
|
69
|
+
logUpdateListeners: () => logUpdateListeners,
|
|
65
70
|
mlkit: () => mlkit,
|
|
66
71
|
pathUtils: () => pathUtils,
|
|
67
72
|
screen: () => screen,
|
|
@@ -70,7 +75,7 @@ __export(index_exports, {
|
|
|
70
75
|
});
|
|
71
76
|
module.exports = __toCommonJS(index_exports);
|
|
72
77
|
|
|
73
|
-
// src/
|
|
78
|
+
// src/bounds.ts
|
|
74
79
|
var Bounds = class _Bounds {
|
|
75
80
|
// 构造函数
|
|
76
81
|
constructor(left, top, right, bottom, width, height, centerX, centerY, exactCenterX, exactCenterY, isEmpty) {
|
|
@@ -171,7 +176,7 @@ var Bounds = class _Bounds {
|
|
|
171
176
|
}
|
|
172
177
|
};
|
|
173
178
|
|
|
174
|
-
// src/
|
|
179
|
+
// src/call-method.ts
|
|
175
180
|
var CallMethod = {
|
|
176
181
|
takeScreenshot: "takeScreenshot",
|
|
177
182
|
takeScreenshotSave: "takeScreenshotSave",
|
|
@@ -243,7 +248,7 @@ var CallMethod = {
|
|
|
243
248
|
saveRootNodeTreeJson: "saveRootNodeTreeJson"
|
|
244
249
|
};
|
|
245
250
|
|
|
246
|
-
// src/
|
|
251
|
+
// src/call-response.ts
|
|
247
252
|
var CallResponse = class {
|
|
248
253
|
constructor(code, data, callbackId) {
|
|
249
254
|
this.code = code;
|
|
@@ -272,7 +277,7 @@ var CallResponse = class {
|
|
|
272
277
|
}
|
|
273
278
|
};
|
|
274
279
|
|
|
275
|
-
// src/
|
|
280
|
+
// src/utils.ts
|
|
276
281
|
function sleep(ms) {
|
|
277
282
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
278
283
|
}
|
|
@@ -292,7 +297,7 @@ function decodeBase64UTF8(base64) {
|
|
|
292
297
|
return new TextDecoder("utf-8").decode(bytes);
|
|
293
298
|
}
|
|
294
299
|
|
|
295
|
-
// src/
|
|
300
|
+
// src/app-info.ts
|
|
296
301
|
var AppInfo = class _AppInfo {
|
|
297
302
|
constructor(isSystem = false, minSdkVersion = 0, name = "", packageName = "", targetSdkVersion = 0, versionCode = 0, versionName = "") {
|
|
298
303
|
this.isSystem = isSystem;
|
|
@@ -337,7 +342,7 @@ var AppInfo = class _AppInfo {
|
|
|
337
342
|
}
|
|
338
343
|
};
|
|
339
344
|
|
|
340
|
-
// src/
|
|
345
|
+
// src/device-info.ts
|
|
341
346
|
var DeviceInfo = class _DeviceInfo {
|
|
342
347
|
constructor(uniqueDeviceId = "", androidID = "", macAddress = "", isDeviceRooted = false, manufacturer = "", model = "", sdkVersionCode = 0, sdkVersionName = "", abiList = [], isAdbEnabled = false, isDevelopmentSettingsEnabled = false, isEmulator = false, isTablet = false) {
|
|
343
348
|
this.uniqueDeviceId = uniqueDeviceId;
|
|
@@ -400,7 +405,7 @@ var DeviceInfo = class _DeviceInfo {
|
|
|
400
405
|
}
|
|
401
406
|
};
|
|
402
407
|
|
|
403
|
-
// src/
|
|
408
|
+
// src/assistsx-async.ts
|
|
404
409
|
var AssistsXAsync = class {
|
|
405
410
|
/**
|
|
406
411
|
* 执行异步调用
|
|
@@ -1408,7 +1413,7 @@ var AssistsXAsync = class {
|
|
|
1408
1413
|
// }
|
|
1409
1414
|
};
|
|
1410
1415
|
|
|
1411
|
-
// src/
|
|
1416
|
+
// src/step-state-store.ts
|
|
1412
1417
|
var import_pinia = require("pinia");
|
|
1413
1418
|
var useStepStore = (0, import_pinia.defineStore)("step", {
|
|
1414
1419
|
state: () => ({
|
|
@@ -1447,7 +1452,7 @@ var useStepStore = (0, import_pinia.defineStore)("step", {
|
|
|
1447
1452
|
}
|
|
1448
1453
|
});
|
|
1449
1454
|
|
|
1450
|
-
// src/
|
|
1455
|
+
// src/step-error.ts
|
|
1451
1456
|
var StepError = class extends Error {
|
|
1452
1457
|
constructor(message, data, impl, tag, originalError, currentStep) {
|
|
1453
1458
|
super(message);
|
|
@@ -1466,7 +1471,7 @@ var StepStopError = class extends StepError {
|
|
|
1466
1471
|
}
|
|
1467
1472
|
};
|
|
1468
1473
|
|
|
1469
|
-
// src/
|
|
1474
|
+
// src/step-async.ts
|
|
1470
1475
|
var StepAsync = class {
|
|
1471
1476
|
/**
|
|
1472
1477
|
* 构造函数
|
|
@@ -1762,7 +1767,7 @@ var StepAsync = class {
|
|
|
1762
1767
|
}
|
|
1763
1768
|
};
|
|
1764
1769
|
|
|
1765
|
-
// src/
|
|
1770
|
+
// src/step.ts
|
|
1766
1771
|
var _Step = class _Step {
|
|
1767
1772
|
/**
|
|
1768
1773
|
* 构造函数
|
|
@@ -1791,7 +1796,7 @@ var _Step = class _Step {
|
|
|
1791
1796
|
*/
|
|
1792
1797
|
this.repeatCount = 0;
|
|
1793
1798
|
/**
|
|
1794
|
-
*
|
|
1799
|
+
* 步骤重复执行最大次数,默认15次
|
|
1795
1800
|
*/
|
|
1796
1801
|
this.repeatCountMax = _Step.repeatCountMaxDefault;
|
|
1797
1802
|
/**
|
|
@@ -1911,7 +1916,7 @@ var _Step = class _Step {
|
|
|
1911
1916
|
} else {
|
|
1912
1917
|
nextStep = await ((_e = currentStep.impl) == null ? void 0 : _e.call(currentStep, currentStep));
|
|
1913
1918
|
}
|
|
1914
|
-
if (currentStep.repeatCountMax
|
|
1919
|
+
if (currentStep.repeatCountMax > _Step.repeatCountInfinite && currentStep.repeatCount >= currentStep.repeatCountMax) {
|
|
1915
1920
|
if (_Step.showLog) {
|
|
1916
1921
|
console.log(
|
|
1917
1922
|
`\u91CD\u590D\u6B21\u6570${currentStep.repeatCount}\u8D85\u8FC7\u6700\u5927\u6B21\u6570${currentStep.repeatCountMax}\uFF0C\u505C\u6B62\u6267\u884C`
|
|
@@ -2470,7 +2475,7 @@ var _Step = class _Step {
|
|
|
2470
2475
|
};
|
|
2471
2476
|
_Step.delayMsDefault = 1e3;
|
|
2472
2477
|
_Step.repeatCountInfinite = -1;
|
|
2473
|
-
_Step.repeatCountMaxDefault =
|
|
2478
|
+
_Step.repeatCountMaxDefault = 15;
|
|
2474
2479
|
_Step.showLog = false;
|
|
2475
2480
|
_Step.exceptionRetryCountMaxDefault = 3;
|
|
2476
2481
|
/**
|
|
@@ -2487,7 +2492,7 @@ _Step._interceptors = [];
|
|
|
2487
2492
|
_Step.exception = void 0;
|
|
2488
2493
|
var Step = _Step;
|
|
2489
2494
|
|
|
2490
|
-
// src/
|
|
2495
|
+
// src/node-async.ts
|
|
2491
2496
|
var NodeAsync = class {
|
|
2492
2497
|
/**
|
|
2493
2498
|
* 构造函数
|
|
@@ -2840,7 +2845,7 @@ var NodeAsync = class {
|
|
|
2840
2845
|
}
|
|
2841
2846
|
};
|
|
2842
2847
|
|
|
2843
|
-
// src/
|
|
2848
|
+
// src/node.ts
|
|
2844
2849
|
var Node = class _Node {
|
|
2845
2850
|
/**
|
|
2846
2851
|
* 节点在屏幕中的边界
|
|
@@ -3234,7 +3239,7 @@ var Node = class _Node {
|
|
|
3234
3239
|
}
|
|
3235
3240
|
};
|
|
3236
3241
|
|
|
3237
|
-
// src/
|
|
3242
|
+
// src/assistsx.ts
|
|
3238
3243
|
var callbacks = /* @__PURE__ */ new Map();
|
|
3239
3244
|
var accessibilityEventListeners = [];
|
|
3240
3245
|
var screen = null;
|
|
@@ -4122,7 +4127,7 @@ if (typeof window !== "undefined") {
|
|
|
4122
4127
|
}
|
|
4123
4128
|
}
|
|
4124
4129
|
|
|
4125
|
-
// src/
|
|
4130
|
+
// src/node-class-value.ts
|
|
4126
4131
|
var NodeClassValue = {
|
|
4127
4132
|
ImageView: "android.widget.ImageView",
|
|
4128
4133
|
TextView: "android.widget.TextView",
|
|
@@ -4136,7 +4141,7 @@ var NodeClassValue = {
|
|
|
4136
4141
|
FrameLayout: "android.widget.FrameLayout"
|
|
4137
4142
|
};
|
|
4138
4143
|
|
|
4139
|
-
// src/
|
|
4144
|
+
// src/window-flags.ts
|
|
4140
4145
|
var WindowFlags = class {
|
|
4141
4146
|
// 0x1000000
|
|
4142
4147
|
/**
|
|
@@ -4247,7 +4252,7 @@ WindowFlags.FLAG_SHOW_WALLPAPER = 1048576;
|
|
|
4247
4252
|
/** 强制硬件加速 */
|
|
4248
4253
|
WindowFlags.FLAG_HARDWARE_ACCELERATED = 16777216;
|
|
4249
4254
|
|
|
4250
|
-
// src/
|
|
4255
|
+
// src/accessibility-event-filter.ts
|
|
4251
4256
|
var AccessibilityEventFilter = class _AccessibilityEventFilter {
|
|
4252
4257
|
constructor(config = {}) {
|
|
4253
4258
|
var _a, _b, _c, _d, _e;
|
|
@@ -6820,7 +6825,7 @@ var Gallery = class {
|
|
|
6820
6825
|
};
|
|
6821
6826
|
var gallery = new Gallery();
|
|
6822
6827
|
|
|
6823
|
-
// src/mlkit/
|
|
6828
|
+
// src/mlkit/mlkit-call-method.ts
|
|
6824
6829
|
var MlkitCallMethod = {
|
|
6825
6830
|
/**
|
|
6826
6831
|
* 识别屏幕中指定词组的位置(基于当前截图)
|
|
@@ -7039,7 +7044,7 @@ var Mlkit = class {
|
|
|
7039
7044
|
};
|
|
7040
7045
|
var mlkit = new Mlkit();
|
|
7041
7046
|
|
|
7042
|
-
// src/barutils/
|
|
7047
|
+
// src/barutils/bar-utils-call-method.ts
|
|
7043
7048
|
var BarUtilsCallMethod = {
|
|
7044
7049
|
// Status bar
|
|
7045
7050
|
getStatusBarHeight: "getStatusBarHeight",
|
|
@@ -7364,7 +7369,7 @@ var BarUtils = class {
|
|
|
7364
7369
|
};
|
|
7365
7370
|
var barUtils = new BarUtils();
|
|
7366
7371
|
|
|
7367
|
-
// src/floatingwindow/
|
|
7372
|
+
// src/floatingwindow/float-call-method.ts
|
|
7368
7373
|
var FloatCallMethod = {
|
|
7369
7374
|
/** Load floating window */
|
|
7370
7375
|
open: "open",
|
|
@@ -7566,6 +7571,334 @@ var Float = class {
|
|
|
7566
7571
|
}
|
|
7567
7572
|
};
|
|
7568
7573
|
var float = new Float();
|
|
7574
|
+
|
|
7575
|
+
// src/log/log-call-method.ts
|
|
7576
|
+
var LogCallMethod = {
|
|
7577
|
+
readAllText: "readAllText",
|
|
7578
|
+
clear: "clear",
|
|
7579
|
+
refreshFromFile: "refreshFromFile",
|
|
7580
|
+
appendLine: "appendLine",
|
|
7581
|
+
appendTimestampedEntry: "appendTimestampedEntry",
|
|
7582
|
+
replaceAll: "replaceAll",
|
|
7583
|
+
subscribe: "subscribe",
|
|
7584
|
+
unsubscribe: "unsubscribe",
|
|
7585
|
+
uploadLogs: "uploadLogs",
|
|
7586
|
+
/** 获取日志服务当前域名(origin,无路径;与上传、管理后台同源),对应 AssistsLogDiagnostics.adminWebBaseUrl() */
|
|
7587
|
+
getLogServiceBaseUrl: "getLogServiceBaseUrl"
|
|
7588
|
+
};
|
|
7589
|
+
var LogStream = {
|
|
7590
|
+
latestLine: "latestLine",
|
|
7591
|
+
entireLogText: "entireLogText"
|
|
7592
|
+
};
|
|
7593
|
+
|
|
7594
|
+
// src/log/log.ts
|
|
7595
|
+
var pendingCallbacks = /* @__PURE__ */ new Map();
|
|
7596
|
+
var streamHandlers = /* @__PURE__ */ new Map();
|
|
7597
|
+
var subscriptionIdToCallbackId = /* @__PURE__ */ new Map();
|
|
7598
|
+
if (typeof window !== "undefined" && !window.assistsxLogCallback) {
|
|
7599
|
+
window.assistsxLogCallback = (data) => {
|
|
7600
|
+
try {
|
|
7601
|
+
const json = decodeBase64UTF8(data);
|
|
7602
|
+
const response = JSON.parse(json);
|
|
7603
|
+
const callbackId = response.callbackId;
|
|
7604
|
+
if (!callbackId) {
|
|
7605
|
+
return;
|
|
7606
|
+
}
|
|
7607
|
+
if (streamHandlers.has(callbackId)) {
|
|
7608
|
+
streamHandlers.get(callbackId)(json);
|
|
7609
|
+
return;
|
|
7610
|
+
}
|
|
7611
|
+
const pending = pendingCallbacks.get(callbackId);
|
|
7612
|
+
if (pending) {
|
|
7613
|
+
pending(json);
|
|
7614
|
+
pendingCallbacks.delete(callbackId);
|
|
7615
|
+
}
|
|
7616
|
+
} catch (e) {
|
|
7617
|
+
console.error("Log bridge callback error:", e);
|
|
7618
|
+
}
|
|
7619
|
+
};
|
|
7620
|
+
}
|
|
7621
|
+
var logUpdateListeners = [];
|
|
7622
|
+
if (typeof window !== "undefined" && !window.onAssistsLogUpdate) {
|
|
7623
|
+
window.onAssistsLogUpdate = (encoded) => {
|
|
7624
|
+
logUpdateListeners.forEach((listener) => {
|
|
7625
|
+
try {
|
|
7626
|
+
const decoded = decodeBase64UTF8(encoded);
|
|
7627
|
+
const parsed = JSON.parse(decoded);
|
|
7628
|
+
listener(parsed);
|
|
7629
|
+
} catch (error) {
|
|
7630
|
+
console.error("Log update listener error:", error);
|
|
7631
|
+
}
|
|
7632
|
+
});
|
|
7633
|
+
};
|
|
7634
|
+
}
|
|
7635
|
+
var Log = class {
|
|
7636
|
+
getBridge() {
|
|
7637
|
+
if (typeof window === "undefined" || !window.assistsxLog) {
|
|
7638
|
+
throw new Error("assistsxLog bridge is not available");
|
|
7639
|
+
}
|
|
7640
|
+
return window.assistsxLog;
|
|
7641
|
+
}
|
|
7642
|
+
async asyncCall(method, args, timeout = 30) {
|
|
7643
|
+
const uuid = generateUUID();
|
|
7644
|
+
const params = {
|
|
7645
|
+
method,
|
|
7646
|
+
arguments: args != null ? args : void 0,
|
|
7647
|
+
callbackId: uuid
|
|
7648
|
+
};
|
|
7649
|
+
const promise = new Promise((resolve) => {
|
|
7650
|
+
pendingCallbacks.set(uuid, (data) => {
|
|
7651
|
+
resolve(data);
|
|
7652
|
+
});
|
|
7653
|
+
setTimeout(() => {
|
|
7654
|
+
pendingCallbacks.delete(uuid);
|
|
7655
|
+
resolve(
|
|
7656
|
+
JSON.stringify(new CallResponse(-1, null, uuid))
|
|
7657
|
+
);
|
|
7658
|
+
}, timeout * 1e3);
|
|
7659
|
+
});
|
|
7660
|
+
this.getBridge().call(JSON.stringify(params));
|
|
7661
|
+
const promiseResult = await promise;
|
|
7662
|
+
if (typeof promiseResult === "string") {
|
|
7663
|
+
const responseData = JSON.parse(promiseResult);
|
|
7664
|
+
return new CallResponse(
|
|
7665
|
+
responseData.code,
|
|
7666
|
+
responseData.data,
|
|
7667
|
+
responseData.callbackId
|
|
7668
|
+
);
|
|
7669
|
+
}
|
|
7670
|
+
throw new Error("Log bridge call failed");
|
|
7671
|
+
}
|
|
7672
|
+
/** 读取当前日志全文 */
|
|
7673
|
+
async readAllText(timeout) {
|
|
7674
|
+
var _a;
|
|
7675
|
+
const res = await this.asyncCall(
|
|
7676
|
+
LogCallMethod.readAllText,
|
|
7677
|
+
void 0,
|
|
7678
|
+
timeout
|
|
7679
|
+
);
|
|
7680
|
+
const d = res.getDataOrNull();
|
|
7681
|
+
return (_a = d == null ? void 0 : d.text) != null ? _a : "";
|
|
7682
|
+
}
|
|
7683
|
+
/**
|
|
7684
|
+
* 获取日志服务当前域名(origin,无路径;与上传、管理后台同源)。
|
|
7685
|
+
* 与 Kotlin getLogServiceBaseUrl / adminWebBaseUrl 对齐。
|
|
7686
|
+
*/
|
|
7687
|
+
async getLogServiceBaseUrl(timeout) {
|
|
7688
|
+
var _a;
|
|
7689
|
+
const res = await this.asyncCall(
|
|
7690
|
+
LogCallMethod.getLogServiceBaseUrl,
|
|
7691
|
+
void 0,
|
|
7692
|
+
timeout
|
|
7693
|
+
);
|
|
7694
|
+
const d = res.getDataOrNull();
|
|
7695
|
+
return (_a = d == null ? void 0 : d.baseUrl) != null ? _a : "";
|
|
7696
|
+
}
|
|
7697
|
+
/** 清空日志 */
|
|
7698
|
+
async clear(timeout) {
|
|
7699
|
+
const res = await this.asyncCall(
|
|
7700
|
+
LogCallMethod.clear,
|
|
7701
|
+
void 0,
|
|
7702
|
+
timeout
|
|
7703
|
+
);
|
|
7704
|
+
return res.isSuccess();
|
|
7705
|
+
}
|
|
7706
|
+
/** 从文件重新加载到内存 Flow */
|
|
7707
|
+
async refreshFromFile(timeout) {
|
|
7708
|
+
const res = await this.asyncCall(
|
|
7709
|
+
LogCallMethod.refreshFromFile,
|
|
7710
|
+
void 0,
|
|
7711
|
+
timeout
|
|
7712
|
+
);
|
|
7713
|
+
return res.isSuccess();
|
|
7714
|
+
}
|
|
7715
|
+
/** 追加一行 */
|
|
7716
|
+
async appendLine(line, maxLength, timeout) {
|
|
7717
|
+
const args = { line };
|
|
7718
|
+
if (maxLength !== void 0) {
|
|
7719
|
+
args.maxLength = maxLength;
|
|
7720
|
+
}
|
|
7721
|
+
const res = await this.asyncCall(
|
|
7722
|
+
LogCallMethod.appendLine,
|
|
7723
|
+
args,
|
|
7724
|
+
timeout
|
|
7725
|
+
);
|
|
7726
|
+
return res.isSuccess();
|
|
7727
|
+
}
|
|
7728
|
+
/** 追加带时间戳的条目 */
|
|
7729
|
+
async appendTimestampedEntry(message, timeout) {
|
|
7730
|
+
const res = await this.asyncCall(
|
|
7731
|
+
LogCallMethod.appendTimestampedEntry,
|
|
7732
|
+
{ message },
|
|
7733
|
+
timeout
|
|
7734
|
+
);
|
|
7735
|
+
return res.isSuccess();
|
|
7736
|
+
}
|
|
7737
|
+
/** 替换全部内容 */
|
|
7738
|
+
async replaceAll(content, timeout) {
|
|
7739
|
+
const res = await this.asyncCall(
|
|
7740
|
+
LogCallMethod.replaceAll,
|
|
7741
|
+
{ content },
|
|
7742
|
+
timeout
|
|
7743
|
+
);
|
|
7744
|
+
return res.isSuccess();
|
|
7745
|
+
}
|
|
7746
|
+
/**
|
|
7747
|
+
* 订阅 Flow:先收到 subscribed,再多次 update。
|
|
7748
|
+
* resolve 后请保留 dispose 或调用 unsubscribe(subscriptionId) 以释放原生协程与 JS 回调。
|
|
7749
|
+
*/
|
|
7750
|
+
async subscribe(stream, onUpdate, options) {
|
|
7751
|
+
var _a;
|
|
7752
|
+
const self = this;
|
|
7753
|
+
const callbackId = generateUUID();
|
|
7754
|
+
const timeoutSec = (_a = options == null ? void 0 : options.timeout) != null ? _a : 30;
|
|
7755
|
+
return new Promise((resolve, reject) => {
|
|
7756
|
+
let settled = false;
|
|
7757
|
+
const timer = setTimeout(() => {
|
|
7758
|
+
if (!settled) {
|
|
7759
|
+
settled = true;
|
|
7760
|
+
streamHandlers.delete(callbackId);
|
|
7761
|
+
reject(new Error("Log subscribe timeout"));
|
|
7762
|
+
}
|
|
7763
|
+
}, timeoutSec * 1e3);
|
|
7764
|
+
streamHandlers.set(callbackId, (raw) => {
|
|
7765
|
+
var _a2, _b, _c;
|
|
7766
|
+
let response;
|
|
7767
|
+
try {
|
|
7768
|
+
response = JSON.parse(raw);
|
|
7769
|
+
} catch (e) {
|
|
7770
|
+
return;
|
|
7771
|
+
}
|
|
7772
|
+
const data = response.data;
|
|
7773
|
+
const code = response.code;
|
|
7774
|
+
if (typeof code === "number" && code !== 0) {
|
|
7775
|
+
if (!settled) {
|
|
7776
|
+
settled = true;
|
|
7777
|
+
clearTimeout(timer);
|
|
7778
|
+
streamHandlers.delete(callbackId);
|
|
7779
|
+
reject(
|
|
7780
|
+
new Error(
|
|
7781
|
+
(_a2 = response.message) != null ? _a2 : "Log subscribe failed"
|
|
7782
|
+
)
|
|
7783
|
+
);
|
|
7784
|
+
}
|
|
7785
|
+
return;
|
|
7786
|
+
}
|
|
7787
|
+
if ((data == null ? void 0 : data.event) === "subscribed" && data.subscriptionId) {
|
|
7788
|
+
if (!settled) {
|
|
7789
|
+
settled = true;
|
|
7790
|
+
clearTimeout(timer);
|
|
7791
|
+
const sid = data.subscriptionId;
|
|
7792
|
+
subscriptionIdToCallbackId.set(sid, callbackId);
|
|
7793
|
+
resolve({
|
|
7794
|
+
subscriptionId: sid,
|
|
7795
|
+
dispose: async () => {
|
|
7796
|
+
await self.unsubscribe(sid);
|
|
7797
|
+
}
|
|
7798
|
+
});
|
|
7799
|
+
}
|
|
7800
|
+
return;
|
|
7801
|
+
}
|
|
7802
|
+
if ((data == null ? void 0 : data.event) === "update" && data.subscriptionId) {
|
|
7803
|
+
onUpdate({
|
|
7804
|
+
text: (_b = data.text) != null ? _b : "",
|
|
7805
|
+
stream: (_c = data.stream) != null ? _c : stream,
|
|
7806
|
+
subscriptionId: data.subscriptionId
|
|
7807
|
+
});
|
|
7808
|
+
}
|
|
7809
|
+
});
|
|
7810
|
+
try {
|
|
7811
|
+
this.getBridge().call(
|
|
7812
|
+
JSON.stringify({
|
|
7813
|
+
method: LogCallMethod.subscribe,
|
|
7814
|
+
arguments: { stream },
|
|
7815
|
+
callbackId
|
|
7816
|
+
})
|
|
7817
|
+
);
|
|
7818
|
+
} catch (e) {
|
|
7819
|
+
clearTimeout(timer);
|
|
7820
|
+
streamHandlers.delete(callbackId);
|
|
7821
|
+
reject(e);
|
|
7822
|
+
}
|
|
7823
|
+
});
|
|
7824
|
+
}
|
|
7825
|
+
/** 取消订阅(与 Kotlin handleUnsubscribe 对齐) */
|
|
7826
|
+
async unsubscribe(subscriptionId, timeout) {
|
|
7827
|
+
const cbId = subscriptionIdToCallbackId.get(subscriptionId);
|
|
7828
|
+
const res = await this.asyncCall(
|
|
7829
|
+
LogCallMethod.unsubscribe,
|
|
7830
|
+
{ subscriptionId },
|
|
7831
|
+
timeout
|
|
7832
|
+
);
|
|
7833
|
+
if (res.isSuccess() && cbId) {
|
|
7834
|
+
streamHandlers.delete(cbId);
|
|
7835
|
+
subscriptionIdToCallbackId.delete(subscriptionId);
|
|
7836
|
+
}
|
|
7837
|
+
return res.isSuccess();
|
|
7838
|
+
}
|
|
7839
|
+
/** 截图 + 节点树 + 日志上传(需 Android API 30+) */
|
|
7840
|
+
async uploadLogs(options) {
|
|
7841
|
+
const { timeout = 60, ...args } = options != null ? options : {};
|
|
7842
|
+
const payload = {};
|
|
7843
|
+
if (args.baseUrl !== void 0) {
|
|
7844
|
+
payload.baseUrl = args.baseUrl;
|
|
7845
|
+
}
|
|
7846
|
+
if (args.format !== void 0) {
|
|
7847
|
+
payload.format = args.format;
|
|
7848
|
+
}
|
|
7849
|
+
if (args.prettyPrint !== void 0) {
|
|
7850
|
+
payload.prettyPrint = args.prettyPrint;
|
|
7851
|
+
}
|
|
7852
|
+
if (args.overlayHiddenDelayMillis !== void 0) {
|
|
7853
|
+
payload.overlayHiddenDelayMillis = args.overlayHiddenDelayMillis;
|
|
7854
|
+
}
|
|
7855
|
+
if (args.uploadKey !== void 0) {
|
|
7856
|
+
payload.uploadKey = args.uploadKey;
|
|
7857
|
+
}
|
|
7858
|
+
const uuid = generateUUID();
|
|
7859
|
+
const params = {
|
|
7860
|
+
method: LogCallMethod.uploadLogs,
|
|
7861
|
+
arguments: Object.keys(payload).length > 0 ? payload : void 0,
|
|
7862
|
+
callbackId: uuid
|
|
7863
|
+
};
|
|
7864
|
+
const promise = new Promise((resolve) => {
|
|
7865
|
+
pendingCallbacks.set(uuid, (data) => {
|
|
7866
|
+
resolve(data);
|
|
7867
|
+
});
|
|
7868
|
+
setTimeout(() => {
|
|
7869
|
+
pendingCallbacks.delete(uuid);
|
|
7870
|
+
resolve(JSON.stringify({ code: -1, data: null, callbackId: uuid }));
|
|
7871
|
+
}, timeout * 1e3);
|
|
7872
|
+
});
|
|
7873
|
+
this.getBridge().call(JSON.stringify(params));
|
|
7874
|
+
const rawStr = await promise;
|
|
7875
|
+
const raw = JSON.parse(rawStr);
|
|
7876
|
+
const d = raw.data;
|
|
7877
|
+
if (d && typeof d === "object" && "success" in d) {
|
|
7878
|
+
return d;
|
|
7879
|
+
}
|
|
7880
|
+
return {
|
|
7881
|
+
success: raw.code === 0,
|
|
7882
|
+
message: typeof raw.message === "string" ? raw.message : raw.code !== 0 ? "uploadLogs failed" : ""
|
|
7883
|
+
};
|
|
7884
|
+
}
|
|
7885
|
+
/**
|
|
7886
|
+
* 注册 onAssistsLogUpdate 推送监听(ASWebView 注入的 Base64 CallResponse,解码后见 LogUpdateEvent)
|
|
7887
|
+
*/
|
|
7888
|
+
addLogUpdateListener(listener) {
|
|
7889
|
+
logUpdateListeners.push(listener);
|
|
7890
|
+
}
|
|
7891
|
+
/**
|
|
7892
|
+
* 移除先前通过 addLogUpdateListener 注册的同一函数引用
|
|
7893
|
+
*/
|
|
7894
|
+
removeLogUpdateListener(listener) {
|
|
7895
|
+
const i = logUpdateListeners.indexOf(listener);
|
|
7896
|
+
if (i !== -1) {
|
|
7897
|
+
logUpdateListeners.splice(i, 1);
|
|
7898
|
+
}
|
|
7899
|
+
}
|
|
7900
|
+
};
|
|
7901
|
+
var log = new Log();
|
|
7569
7902
|
// Annotate the CommonJS export names for ESM import in node:
|
|
7570
7903
|
0 && (module.exports = {
|
|
7571
7904
|
AccessibilityEventFilter,
|
|
@@ -7587,6 +7920,9 @@ var float = new Float();
|
|
|
7587
7920
|
ImageUtils,
|
|
7588
7921
|
Ime,
|
|
7589
7922
|
ImeAction,
|
|
7923
|
+
Log,
|
|
7924
|
+
LogCallMethod,
|
|
7925
|
+
LogStream,
|
|
7590
7926
|
Mlkit,
|
|
7591
7927
|
MlkitCallMethod,
|
|
7592
7928
|
Node,
|
|
@@ -7610,6 +7946,8 @@ var float = new Float();
|
|
|
7610
7946
|
http,
|
|
7611
7947
|
imageUtils,
|
|
7612
7948
|
ime,
|
|
7949
|
+
log,
|
|
7950
|
+
logUpdateListeners,
|
|
7613
7951
|
mlkit,
|
|
7614
7952
|
pathUtils,
|
|
7615
7953
|
screen,
|