assistsx-js 0.1.42 → 0.2.0
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/index.cjs +358 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +118 -1
- package/dist/index.d.ts +118 -1
- package/dist/index.global.js +1 -1
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +353 -20
- 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} +7 -7
- /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/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/bounds.ts
|
|
2
2
|
var Bounds = class _Bounds {
|
|
3
3
|
// 构造函数
|
|
4
4
|
constructor(left, top, right, bottom, width, height, centerX, centerY, exactCenterX, exactCenterY, isEmpty) {
|
|
@@ -99,7 +99,7 @@ var Bounds = class _Bounds {
|
|
|
99
99
|
}
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
-
// src/
|
|
102
|
+
// src/call-method.ts
|
|
103
103
|
var CallMethod = {
|
|
104
104
|
takeScreenshot: "takeScreenshot",
|
|
105
105
|
takeScreenshotSave: "takeScreenshotSave",
|
|
@@ -171,7 +171,7 @@ var CallMethod = {
|
|
|
171
171
|
saveRootNodeTreeJson: "saveRootNodeTreeJson"
|
|
172
172
|
};
|
|
173
173
|
|
|
174
|
-
// src/
|
|
174
|
+
// src/call-response.ts
|
|
175
175
|
var CallResponse = class {
|
|
176
176
|
constructor(code, data, callbackId) {
|
|
177
177
|
this.code = code;
|
|
@@ -200,7 +200,7 @@ var CallResponse = class {
|
|
|
200
200
|
}
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
-
// src/
|
|
203
|
+
// src/utils.ts
|
|
204
204
|
function sleep(ms) {
|
|
205
205
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
206
206
|
}
|
|
@@ -220,7 +220,7 @@ function decodeBase64UTF8(base64) {
|
|
|
220
220
|
return new TextDecoder("utf-8").decode(bytes);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
// src/
|
|
223
|
+
// src/app-info.ts
|
|
224
224
|
var AppInfo = class _AppInfo {
|
|
225
225
|
constructor(isSystem = false, minSdkVersion = 0, name = "", packageName = "", targetSdkVersion = 0, versionCode = 0, versionName = "") {
|
|
226
226
|
this.isSystem = isSystem;
|
|
@@ -265,7 +265,7 @@ var AppInfo = class _AppInfo {
|
|
|
265
265
|
}
|
|
266
266
|
};
|
|
267
267
|
|
|
268
|
-
// src/
|
|
268
|
+
// src/device-info.ts
|
|
269
269
|
var DeviceInfo = class _DeviceInfo {
|
|
270
270
|
constructor(uniqueDeviceId = "", androidID = "", macAddress = "", isDeviceRooted = false, manufacturer = "", model = "", sdkVersionCode = 0, sdkVersionName = "", abiList = [], isAdbEnabled = false, isDevelopmentSettingsEnabled = false, isEmulator = false, isTablet = false) {
|
|
271
271
|
this.uniqueDeviceId = uniqueDeviceId;
|
|
@@ -328,7 +328,7 @@ var DeviceInfo = class _DeviceInfo {
|
|
|
328
328
|
}
|
|
329
329
|
};
|
|
330
330
|
|
|
331
|
-
// src/
|
|
331
|
+
// src/assistsx-async.ts
|
|
332
332
|
var AssistsXAsync = class {
|
|
333
333
|
/**
|
|
334
334
|
* 执行异步调用
|
|
@@ -1336,7 +1336,7 @@ var AssistsXAsync = class {
|
|
|
1336
1336
|
// }
|
|
1337
1337
|
};
|
|
1338
1338
|
|
|
1339
|
-
// src/
|
|
1339
|
+
// src/step-state-store.ts
|
|
1340
1340
|
import { defineStore } from "pinia";
|
|
1341
1341
|
var useStepStore = defineStore("step", {
|
|
1342
1342
|
state: () => ({
|
|
@@ -1375,7 +1375,7 @@ var useStepStore = defineStore("step", {
|
|
|
1375
1375
|
}
|
|
1376
1376
|
});
|
|
1377
1377
|
|
|
1378
|
-
// src/
|
|
1378
|
+
// src/step-error.ts
|
|
1379
1379
|
var StepError = class extends Error {
|
|
1380
1380
|
constructor(message, data, impl, tag, originalError, currentStep) {
|
|
1381
1381
|
super(message);
|
|
@@ -1394,7 +1394,7 @@ var StepStopError = class extends StepError {
|
|
|
1394
1394
|
}
|
|
1395
1395
|
};
|
|
1396
1396
|
|
|
1397
|
-
// src/
|
|
1397
|
+
// src/step-async.ts
|
|
1398
1398
|
var StepAsync = class {
|
|
1399
1399
|
/**
|
|
1400
1400
|
* 构造函数
|
|
@@ -1690,7 +1690,7 @@ var StepAsync = class {
|
|
|
1690
1690
|
}
|
|
1691
1691
|
};
|
|
1692
1692
|
|
|
1693
|
-
// src/
|
|
1693
|
+
// src/step.ts
|
|
1694
1694
|
var _Step = class _Step {
|
|
1695
1695
|
/**
|
|
1696
1696
|
* 构造函数
|
|
@@ -2415,7 +2415,7 @@ _Step._interceptors = [];
|
|
|
2415
2415
|
_Step.exception = void 0;
|
|
2416
2416
|
var Step = _Step;
|
|
2417
2417
|
|
|
2418
|
-
// src/
|
|
2418
|
+
// src/node-async.ts
|
|
2419
2419
|
var NodeAsync = class {
|
|
2420
2420
|
/**
|
|
2421
2421
|
* 构造函数
|
|
@@ -2768,7 +2768,7 @@ var NodeAsync = class {
|
|
|
2768
2768
|
}
|
|
2769
2769
|
};
|
|
2770
2770
|
|
|
2771
|
-
// src/
|
|
2771
|
+
// src/node.ts
|
|
2772
2772
|
var Node = class _Node {
|
|
2773
2773
|
/**
|
|
2774
2774
|
* 节点在屏幕中的边界
|
|
@@ -3162,7 +3162,7 @@ var Node = class _Node {
|
|
|
3162
3162
|
}
|
|
3163
3163
|
};
|
|
3164
3164
|
|
|
3165
|
-
// src/
|
|
3165
|
+
// src/assistsx.ts
|
|
3166
3166
|
var callbacks = /* @__PURE__ */ new Map();
|
|
3167
3167
|
var accessibilityEventListeners = [];
|
|
3168
3168
|
var screen = null;
|
|
@@ -4050,7 +4050,7 @@ if (typeof window !== "undefined") {
|
|
|
4050
4050
|
}
|
|
4051
4051
|
}
|
|
4052
4052
|
|
|
4053
|
-
// src/
|
|
4053
|
+
// src/node-class-value.ts
|
|
4054
4054
|
var NodeClassValue = {
|
|
4055
4055
|
ImageView: "android.widget.ImageView",
|
|
4056
4056
|
TextView: "android.widget.TextView",
|
|
@@ -4064,7 +4064,7 @@ var NodeClassValue = {
|
|
|
4064
4064
|
FrameLayout: "android.widget.FrameLayout"
|
|
4065
4065
|
};
|
|
4066
4066
|
|
|
4067
|
-
// src/
|
|
4067
|
+
// src/window-flags.ts
|
|
4068
4068
|
var WindowFlags = class {
|
|
4069
4069
|
// 0x1000000
|
|
4070
4070
|
/**
|
|
@@ -4175,7 +4175,7 @@ WindowFlags.FLAG_SHOW_WALLPAPER = 1048576;
|
|
|
4175
4175
|
/** 强制硬件加速 */
|
|
4176
4176
|
WindowFlags.FLAG_HARDWARE_ACCELERATED = 16777216;
|
|
4177
4177
|
|
|
4178
|
-
// src/
|
|
4178
|
+
// src/accessibility-event-filter.ts
|
|
4179
4179
|
var AccessibilityEventFilter = class _AccessibilityEventFilter {
|
|
4180
4180
|
constructor(config = {}) {
|
|
4181
4181
|
var _a, _b, _c, _d, _e;
|
|
@@ -6748,7 +6748,7 @@ var Gallery = class {
|
|
|
6748
6748
|
};
|
|
6749
6749
|
var gallery = new Gallery();
|
|
6750
6750
|
|
|
6751
|
-
// src/mlkit/
|
|
6751
|
+
// src/mlkit/mlkit-call-method.ts
|
|
6752
6752
|
var MlkitCallMethod = {
|
|
6753
6753
|
/**
|
|
6754
6754
|
* 识别屏幕中指定词组的位置(基于当前截图)
|
|
@@ -6967,7 +6967,7 @@ var Mlkit = class {
|
|
|
6967
6967
|
};
|
|
6968
6968
|
var mlkit = new Mlkit();
|
|
6969
6969
|
|
|
6970
|
-
// src/barutils/
|
|
6970
|
+
// src/barutils/bar-utils-call-method.ts
|
|
6971
6971
|
var BarUtilsCallMethod = {
|
|
6972
6972
|
// Status bar
|
|
6973
6973
|
getStatusBarHeight: "getStatusBarHeight",
|
|
@@ -7292,7 +7292,7 @@ var BarUtils = class {
|
|
|
7292
7292
|
};
|
|
7293
7293
|
var barUtils = new BarUtils();
|
|
7294
7294
|
|
|
7295
|
-
// src/floatingwindow/
|
|
7295
|
+
// src/floatingwindow/float-call-method.ts
|
|
7296
7296
|
var FloatCallMethod = {
|
|
7297
7297
|
/** Load floating window */
|
|
7298
7298
|
open: "open",
|
|
@@ -7494,6 +7494,334 @@ var Float = class {
|
|
|
7494
7494
|
}
|
|
7495
7495
|
};
|
|
7496
7496
|
var float = new Float();
|
|
7497
|
+
|
|
7498
|
+
// src/log/log-call-method.ts
|
|
7499
|
+
var LogCallMethod = {
|
|
7500
|
+
readAllText: "readAllText",
|
|
7501
|
+
clear: "clear",
|
|
7502
|
+
refreshFromFile: "refreshFromFile",
|
|
7503
|
+
appendLine: "appendLine",
|
|
7504
|
+
appendTimestampedEntry: "appendTimestampedEntry",
|
|
7505
|
+
replaceAll: "replaceAll",
|
|
7506
|
+
subscribe: "subscribe",
|
|
7507
|
+
unsubscribe: "unsubscribe",
|
|
7508
|
+
uploadLogs: "uploadLogs",
|
|
7509
|
+
/** 获取日志服务当前域名(origin,无路径;与上传、管理后台同源),对应 AssistsLogDiagnostics.adminWebBaseUrl() */
|
|
7510
|
+
getLogServiceBaseUrl: "getLogServiceBaseUrl"
|
|
7511
|
+
};
|
|
7512
|
+
var LogStream = {
|
|
7513
|
+
latestLine: "latestLine",
|
|
7514
|
+
entireLogText: "entireLogText"
|
|
7515
|
+
};
|
|
7516
|
+
|
|
7517
|
+
// src/log/log.ts
|
|
7518
|
+
var pendingCallbacks = /* @__PURE__ */ new Map();
|
|
7519
|
+
var streamHandlers = /* @__PURE__ */ new Map();
|
|
7520
|
+
var subscriptionIdToCallbackId = /* @__PURE__ */ new Map();
|
|
7521
|
+
if (typeof window !== "undefined" && !window.assistsxLogCallback) {
|
|
7522
|
+
window.assistsxLogCallback = (data) => {
|
|
7523
|
+
try {
|
|
7524
|
+
const json = decodeBase64UTF8(data);
|
|
7525
|
+
const response = JSON.parse(json);
|
|
7526
|
+
const callbackId = response.callbackId;
|
|
7527
|
+
if (!callbackId) {
|
|
7528
|
+
return;
|
|
7529
|
+
}
|
|
7530
|
+
if (streamHandlers.has(callbackId)) {
|
|
7531
|
+
streamHandlers.get(callbackId)(json);
|
|
7532
|
+
return;
|
|
7533
|
+
}
|
|
7534
|
+
const pending = pendingCallbacks.get(callbackId);
|
|
7535
|
+
if (pending) {
|
|
7536
|
+
pending(json);
|
|
7537
|
+
pendingCallbacks.delete(callbackId);
|
|
7538
|
+
}
|
|
7539
|
+
} catch (e) {
|
|
7540
|
+
console.error("Log bridge callback error:", e);
|
|
7541
|
+
}
|
|
7542
|
+
};
|
|
7543
|
+
}
|
|
7544
|
+
var logUpdateListeners = [];
|
|
7545
|
+
if (typeof window !== "undefined" && !window.onAssistsLogUpdate) {
|
|
7546
|
+
window.onAssistsLogUpdate = (encoded) => {
|
|
7547
|
+
logUpdateListeners.forEach((listener) => {
|
|
7548
|
+
try {
|
|
7549
|
+
const decoded = decodeBase64UTF8(encoded);
|
|
7550
|
+
const parsed = JSON.parse(decoded);
|
|
7551
|
+
listener(parsed);
|
|
7552
|
+
} catch (error) {
|
|
7553
|
+
console.error("Log update listener error:", error);
|
|
7554
|
+
}
|
|
7555
|
+
});
|
|
7556
|
+
};
|
|
7557
|
+
}
|
|
7558
|
+
var Log = class {
|
|
7559
|
+
getBridge() {
|
|
7560
|
+
if (typeof window === "undefined" || !window.assistsxLog) {
|
|
7561
|
+
throw new Error("assistsxLog bridge is not available");
|
|
7562
|
+
}
|
|
7563
|
+
return window.assistsxLog;
|
|
7564
|
+
}
|
|
7565
|
+
async asyncCall(method, args, timeout = 30) {
|
|
7566
|
+
const uuid = generateUUID();
|
|
7567
|
+
const params = {
|
|
7568
|
+
method,
|
|
7569
|
+
arguments: args != null ? args : void 0,
|
|
7570
|
+
callbackId: uuid
|
|
7571
|
+
};
|
|
7572
|
+
const promise = new Promise((resolve) => {
|
|
7573
|
+
pendingCallbacks.set(uuid, (data) => {
|
|
7574
|
+
resolve(data);
|
|
7575
|
+
});
|
|
7576
|
+
setTimeout(() => {
|
|
7577
|
+
pendingCallbacks.delete(uuid);
|
|
7578
|
+
resolve(
|
|
7579
|
+
JSON.stringify(new CallResponse(-1, null, uuid))
|
|
7580
|
+
);
|
|
7581
|
+
}, timeout * 1e3);
|
|
7582
|
+
});
|
|
7583
|
+
this.getBridge().call(JSON.stringify(params));
|
|
7584
|
+
const promiseResult = await promise;
|
|
7585
|
+
if (typeof promiseResult === "string") {
|
|
7586
|
+
const responseData = JSON.parse(promiseResult);
|
|
7587
|
+
return new CallResponse(
|
|
7588
|
+
responseData.code,
|
|
7589
|
+
responseData.data,
|
|
7590
|
+
responseData.callbackId
|
|
7591
|
+
);
|
|
7592
|
+
}
|
|
7593
|
+
throw new Error("Log bridge call failed");
|
|
7594
|
+
}
|
|
7595
|
+
/** 读取当前日志全文 */
|
|
7596
|
+
async readAllText(timeout) {
|
|
7597
|
+
var _a;
|
|
7598
|
+
const res = await this.asyncCall(
|
|
7599
|
+
LogCallMethod.readAllText,
|
|
7600
|
+
void 0,
|
|
7601
|
+
timeout
|
|
7602
|
+
);
|
|
7603
|
+
const d = res.getDataOrNull();
|
|
7604
|
+
return (_a = d == null ? void 0 : d.text) != null ? _a : "";
|
|
7605
|
+
}
|
|
7606
|
+
/**
|
|
7607
|
+
* 获取日志服务当前域名(origin,无路径;与上传、管理后台同源)。
|
|
7608
|
+
* 与 Kotlin getLogServiceBaseUrl / adminWebBaseUrl 对齐。
|
|
7609
|
+
*/
|
|
7610
|
+
async getLogServiceBaseUrl(timeout) {
|
|
7611
|
+
var _a;
|
|
7612
|
+
const res = await this.asyncCall(
|
|
7613
|
+
LogCallMethod.getLogServiceBaseUrl,
|
|
7614
|
+
void 0,
|
|
7615
|
+
timeout
|
|
7616
|
+
);
|
|
7617
|
+
const d = res.getDataOrNull();
|
|
7618
|
+
return (_a = d == null ? void 0 : d.baseUrl) != null ? _a : "";
|
|
7619
|
+
}
|
|
7620
|
+
/** 清空日志 */
|
|
7621
|
+
async clear(timeout) {
|
|
7622
|
+
const res = await this.asyncCall(
|
|
7623
|
+
LogCallMethod.clear,
|
|
7624
|
+
void 0,
|
|
7625
|
+
timeout
|
|
7626
|
+
);
|
|
7627
|
+
return res.isSuccess();
|
|
7628
|
+
}
|
|
7629
|
+
/** 从文件重新加载到内存 Flow */
|
|
7630
|
+
async refreshFromFile(timeout) {
|
|
7631
|
+
const res = await this.asyncCall(
|
|
7632
|
+
LogCallMethod.refreshFromFile,
|
|
7633
|
+
void 0,
|
|
7634
|
+
timeout
|
|
7635
|
+
);
|
|
7636
|
+
return res.isSuccess();
|
|
7637
|
+
}
|
|
7638
|
+
/** 追加一行 */
|
|
7639
|
+
async appendLine(line, maxLength, timeout) {
|
|
7640
|
+
const args = { line };
|
|
7641
|
+
if (maxLength !== void 0) {
|
|
7642
|
+
args.maxLength = maxLength;
|
|
7643
|
+
}
|
|
7644
|
+
const res = await this.asyncCall(
|
|
7645
|
+
LogCallMethod.appendLine,
|
|
7646
|
+
args,
|
|
7647
|
+
timeout
|
|
7648
|
+
);
|
|
7649
|
+
return res.isSuccess();
|
|
7650
|
+
}
|
|
7651
|
+
/** 追加带时间戳的条目 */
|
|
7652
|
+
async appendTimestampedEntry(message, timeout) {
|
|
7653
|
+
const res = await this.asyncCall(
|
|
7654
|
+
LogCallMethod.appendTimestampedEntry,
|
|
7655
|
+
{ message },
|
|
7656
|
+
timeout
|
|
7657
|
+
);
|
|
7658
|
+
return res.isSuccess();
|
|
7659
|
+
}
|
|
7660
|
+
/** 替换全部内容 */
|
|
7661
|
+
async replaceAll(content, timeout) {
|
|
7662
|
+
const res = await this.asyncCall(
|
|
7663
|
+
LogCallMethod.replaceAll,
|
|
7664
|
+
{ content },
|
|
7665
|
+
timeout
|
|
7666
|
+
);
|
|
7667
|
+
return res.isSuccess();
|
|
7668
|
+
}
|
|
7669
|
+
/**
|
|
7670
|
+
* 订阅 Flow:先收到 subscribed,再多次 update。
|
|
7671
|
+
* resolve 后请保留 dispose 或调用 unsubscribe(subscriptionId) 以释放原生协程与 JS 回调。
|
|
7672
|
+
*/
|
|
7673
|
+
async subscribe(stream, onUpdate, options) {
|
|
7674
|
+
var _a;
|
|
7675
|
+
const self = this;
|
|
7676
|
+
const callbackId = generateUUID();
|
|
7677
|
+
const timeoutSec = (_a = options == null ? void 0 : options.timeout) != null ? _a : 30;
|
|
7678
|
+
return new Promise((resolve, reject) => {
|
|
7679
|
+
let settled = false;
|
|
7680
|
+
const timer = setTimeout(() => {
|
|
7681
|
+
if (!settled) {
|
|
7682
|
+
settled = true;
|
|
7683
|
+
streamHandlers.delete(callbackId);
|
|
7684
|
+
reject(new Error("Log subscribe timeout"));
|
|
7685
|
+
}
|
|
7686
|
+
}, timeoutSec * 1e3);
|
|
7687
|
+
streamHandlers.set(callbackId, (raw) => {
|
|
7688
|
+
var _a2, _b, _c;
|
|
7689
|
+
let response;
|
|
7690
|
+
try {
|
|
7691
|
+
response = JSON.parse(raw);
|
|
7692
|
+
} catch (e) {
|
|
7693
|
+
return;
|
|
7694
|
+
}
|
|
7695
|
+
const data = response.data;
|
|
7696
|
+
const code = response.code;
|
|
7697
|
+
if (typeof code === "number" && code !== 0) {
|
|
7698
|
+
if (!settled) {
|
|
7699
|
+
settled = true;
|
|
7700
|
+
clearTimeout(timer);
|
|
7701
|
+
streamHandlers.delete(callbackId);
|
|
7702
|
+
reject(
|
|
7703
|
+
new Error(
|
|
7704
|
+
(_a2 = response.message) != null ? _a2 : "Log subscribe failed"
|
|
7705
|
+
)
|
|
7706
|
+
);
|
|
7707
|
+
}
|
|
7708
|
+
return;
|
|
7709
|
+
}
|
|
7710
|
+
if ((data == null ? void 0 : data.event) === "subscribed" && data.subscriptionId) {
|
|
7711
|
+
if (!settled) {
|
|
7712
|
+
settled = true;
|
|
7713
|
+
clearTimeout(timer);
|
|
7714
|
+
const sid = data.subscriptionId;
|
|
7715
|
+
subscriptionIdToCallbackId.set(sid, callbackId);
|
|
7716
|
+
resolve({
|
|
7717
|
+
subscriptionId: sid,
|
|
7718
|
+
dispose: async () => {
|
|
7719
|
+
await self.unsubscribe(sid);
|
|
7720
|
+
}
|
|
7721
|
+
});
|
|
7722
|
+
}
|
|
7723
|
+
return;
|
|
7724
|
+
}
|
|
7725
|
+
if ((data == null ? void 0 : data.event) === "update" && data.subscriptionId) {
|
|
7726
|
+
onUpdate({
|
|
7727
|
+
text: (_b = data.text) != null ? _b : "",
|
|
7728
|
+
stream: (_c = data.stream) != null ? _c : stream,
|
|
7729
|
+
subscriptionId: data.subscriptionId
|
|
7730
|
+
});
|
|
7731
|
+
}
|
|
7732
|
+
});
|
|
7733
|
+
try {
|
|
7734
|
+
this.getBridge().call(
|
|
7735
|
+
JSON.stringify({
|
|
7736
|
+
method: LogCallMethod.subscribe,
|
|
7737
|
+
arguments: { stream },
|
|
7738
|
+
callbackId
|
|
7739
|
+
})
|
|
7740
|
+
);
|
|
7741
|
+
} catch (e) {
|
|
7742
|
+
clearTimeout(timer);
|
|
7743
|
+
streamHandlers.delete(callbackId);
|
|
7744
|
+
reject(e);
|
|
7745
|
+
}
|
|
7746
|
+
});
|
|
7747
|
+
}
|
|
7748
|
+
/** 取消订阅(与 Kotlin handleUnsubscribe 对齐) */
|
|
7749
|
+
async unsubscribe(subscriptionId, timeout) {
|
|
7750
|
+
const cbId = subscriptionIdToCallbackId.get(subscriptionId);
|
|
7751
|
+
const res = await this.asyncCall(
|
|
7752
|
+
LogCallMethod.unsubscribe,
|
|
7753
|
+
{ subscriptionId },
|
|
7754
|
+
timeout
|
|
7755
|
+
);
|
|
7756
|
+
if (res.isSuccess() && cbId) {
|
|
7757
|
+
streamHandlers.delete(cbId);
|
|
7758
|
+
subscriptionIdToCallbackId.delete(subscriptionId);
|
|
7759
|
+
}
|
|
7760
|
+
return res.isSuccess();
|
|
7761
|
+
}
|
|
7762
|
+
/** 截图 + 节点树 + 日志上传(需 Android API 30+) */
|
|
7763
|
+
async uploadLogs(options) {
|
|
7764
|
+
const { timeout = 60, ...args } = options != null ? options : {};
|
|
7765
|
+
const payload = {};
|
|
7766
|
+
if (args.baseUrl !== void 0) {
|
|
7767
|
+
payload.baseUrl = args.baseUrl;
|
|
7768
|
+
}
|
|
7769
|
+
if (args.format !== void 0) {
|
|
7770
|
+
payload.format = args.format;
|
|
7771
|
+
}
|
|
7772
|
+
if (args.prettyPrint !== void 0) {
|
|
7773
|
+
payload.prettyPrint = args.prettyPrint;
|
|
7774
|
+
}
|
|
7775
|
+
if (args.overlayHiddenDelayMillis !== void 0) {
|
|
7776
|
+
payload.overlayHiddenDelayMillis = args.overlayHiddenDelayMillis;
|
|
7777
|
+
}
|
|
7778
|
+
if (args.uploadKey !== void 0) {
|
|
7779
|
+
payload.uploadKey = args.uploadKey;
|
|
7780
|
+
}
|
|
7781
|
+
const uuid = generateUUID();
|
|
7782
|
+
const params = {
|
|
7783
|
+
method: LogCallMethod.uploadLogs,
|
|
7784
|
+
arguments: Object.keys(payload).length > 0 ? payload : void 0,
|
|
7785
|
+
callbackId: uuid
|
|
7786
|
+
};
|
|
7787
|
+
const promise = new Promise((resolve) => {
|
|
7788
|
+
pendingCallbacks.set(uuid, (data) => {
|
|
7789
|
+
resolve(data);
|
|
7790
|
+
});
|
|
7791
|
+
setTimeout(() => {
|
|
7792
|
+
pendingCallbacks.delete(uuid);
|
|
7793
|
+
resolve(JSON.stringify({ code: -1, data: null, callbackId: uuid }));
|
|
7794
|
+
}, timeout * 1e3);
|
|
7795
|
+
});
|
|
7796
|
+
this.getBridge().call(JSON.stringify(params));
|
|
7797
|
+
const rawStr = await promise;
|
|
7798
|
+
const raw = JSON.parse(rawStr);
|
|
7799
|
+
const d = raw.data;
|
|
7800
|
+
if (d && typeof d === "object" && "success" in d) {
|
|
7801
|
+
return d;
|
|
7802
|
+
}
|
|
7803
|
+
return {
|
|
7804
|
+
success: raw.code === 0,
|
|
7805
|
+
message: typeof raw.message === "string" ? raw.message : raw.code !== 0 ? "uploadLogs failed" : ""
|
|
7806
|
+
};
|
|
7807
|
+
}
|
|
7808
|
+
/**
|
|
7809
|
+
* 注册 onAssistsLogUpdate 推送监听(ASWebView 注入的 Base64 CallResponse,解码后见 LogUpdateEvent)
|
|
7810
|
+
*/
|
|
7811
|
+
addLogUpdateListener(listener) {
|
|
7812
|
+
logUpdateListeners.push(listener);
|
|
7813
|
+
}
|
|
7814
|
+
/**
|
|
7815
|
+
* 移除先前通过 addLogUpdateListener 注册的同一函数引用
|
|
7816
|
+
*/
|
|
7817
|
+
removeLogUpdateListener(listener) {
|
|
7818
|
+
const i = logUpdateListeners.indexOf(listener);
|
|
7819
|
+
if (i !== -1) {
|
|
7820
|
+
logUpdateListeners.splice(i, 1);
|
|
7821
|
+
}
|
|
7822
|
+
}
|
|
7823
|
+
};
|
|
7824
|
+
var log = new Log();
|
|
7497
7825
|
export {
|
|
7498
7826
|
AccessibilityEventFilter,
|
|
7499
7827
|
AppInfo,
|
|
@@ -7514,6 +7842,9 @@ export {
|
|
|
7514
7842
|
ImageUtils,
|
|
7515
7843
|
Ime,
|
|
7516
7844
|
ImeAction,
|
|
7845
|
+
Log,
|
|
7846
|
+
LogCallMethod,
|
|
7847
|
+
LogStream,
|
|
7517
7848
|
Mlkit,
|
|
7518
7849
|
MlkitCallMethod,
|
|
7519
7850
|
Node,
|
|
@@ -7537,6 +7868,8 @@ export {
|
|
|
7537
7868
|
http,
|
|
7538
7869
|
imageUtils,
|
|
7539
7870
|
ime,
|
|
7871
|
+
log,
|
|
7872
|
+
logUpdateListeners,
|
|
7540
7873
|
mlkit,
|
|
7541
7874
|
pathUtils,
|
|
7542
7875
|
screen,
|