@pyrokine/mcp-chrome 1.6.0 → 2.0.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/README.md +101 -43
- package/dist/anti-detection/behavior.d.ts.map +1 -1
- package/dist/anti-detection/behavior.js.map +1 -1
- package/dist/anti-detection/index.d.ts +1 -1
- package/dist/anti-detection/index.d.ts.map +1 -1
- package/dist/anti-detection/index.js +1 -1
- package/dist/anti-detection/index.js.map +1 -1
- package/dist/anti-detection/injection.d.ts +6 -2
- package/dist/anti-detection/injection.d.ts.map +1 -1
- package/dist/anti-detection/injection.js +32 -79
- package/dist/anti-detection/injection.js.map +1 -1
- package/dist/cdp/client.d.ts +2 -2
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +8 -10
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/index.d.ts.map +1 -1
- package/dist/cdp/index.js.map +1 -1
- package/dist/cdp/launcher.d.ts.map +1 -1
- package/dist/cdp/launcher.js +40 -13
- package/dist/cdp/launcher.js.map +1 -1
- package/dist/core/auto-wait.d.ts +2 -2
- package/dist/core/auto-wait.d.ts.map +1 -1
- package/dist/core/auto-wait.js +2 -2
- package/dist/core/auto-wait.js.map +1 -1
- package/dist/core/browser-driver.d.ts +307 -0
- package/dist/core/browser-driver.d.ts.map +1 -0
- package/dist/core/browser-driver.js +21 -0
- package/dist/core/browser-driver.js.map +1 -0
- package/dist/core/error-sanitizer.d.ts +25 -0
- package/dist/core/error-sanitizer.d.ts.map +1 -0
- package/dist/core/error-sanitizer.js +66 -0
- package/dist/core/error-sanitizer.js.map +1 -0
- package/dist/core/errors.d.ts +10 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +17 -4
- package/dist/core/errors.js.map +1 -1
- package/dist/core/extension-errors.d.ts +20 -0
- package/dist/core/extension-errors.d.ts.map +1 -0
- package/dist/core/extension-errors.js +40 -0
- package/dist/core/extension-errors.js.map +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/locator.d.ts +2 -2
- package/dist/core/locator.d.ts.map +1 -1
- package/dist/core/locator.js +25 -65
- package/dist/core/locator.js.map +1 -1
- package/dist/core/retry.d.ts +2 -2
- package/dist/core/retry.d.ts.map +1 -1
- package/dist/core/retry.js +2 -2
- package/dist/core/retry.js.map +1 -1
- package/dist/core/session.d.ts +153 -46
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +672 -177
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +11 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +13 -6
- package/dist/core/types.js.map +1 -1
- package/dist/core/unified-session.d.ts +69 -68
- package/dist/core/unified-session.d.ts.map +1 -1
- package/dist/core/unified-session.js +356 -615
- package/dist/core/unified-session.js.map +1 -1
- package/dist/core/utils.d.ts +7 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +33 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/extension/bridge.d.ts +80 -39
- package/dist/extension/bridge.d.ts.map +1 -1
- package/dist/extension/bridge.js +195 -65
- package/dist/extension/bridge.js.map +1 -1
- package/dist/extension/http-server.d.ts +6 -4
- package/dist/extension/http-server.d.ts.map +1 -1
- package/dist/extension/http-server.js +45 -31
- package/dist/extension/http-server.js.map +1 -1
- package/dist/extension/index.d.ts.map +1 -1
- package/dist/extension/index.js.map +1 -1
- package/dist/index.js +27 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +33 -35
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +38 -16
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +59 -13
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +263 -155
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +311 -75
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +31 -17
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/manage.d.ts.map +1 -1
- package/dist/tools/manage.js +25 -28
- package/dist/tools/manage.js.map +1 -1
- package/dist/tools/schema.d.ts +1 -1
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +31 -55
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/wait.js +73 -22
- package/dist/tools/wait.js.map +1 -1
- package/package.json +48 -40
package/dist/cdp/launcher.js
CHANGED
|
@@ -31,9 +31,7 @@ const CHROME_PATHS = {
|
|
|
31
31
|
win32: [
|
|
32
32
|
'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
|
|
33
33
|
'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
|
|
34
|
-
...(process.env.LOCALAPPDATA
|
|
35
|
-
? [`${process.env.LOCALAPPDATA}\\Google\\Chrome\\Application\\chrome.exe`]
|
|
36
|
-
: []),
|
|
34
|
+
...(process.env.LOCALAPPDATA ? [`${process.env.LOCALAPPDATA}\\Google\\Chrome\\Application\\chrome.exe`] : []),
|
|
37
35
|
],
|
|
38
36
|
};
|
|
39
37
|
/**
|
|
@@ -67,6 +65,27 @@ export class BrowserLauncher {
|
|
|
67
65
|
if (!chromePath) {
|
|
68
66
|
throw new BrowserNotFoundError();
|
|
69
67
|
}
|
|
68
|
+
// executablePath 校验:用户显式提供的路径必须存在且不在系统敏感目录
|
|
69
|
+
if (executablePath) {
|
|
70
|
+
if (!existsSync(executablePath)) {
|
|
71
|
+
throw new Error(`executablePath 不存在: ${executablePath}`);
|
|
72
|
+
}
|
|
73
|
+
const lowered = executablePath.toLowerCase();
|
|
74
|
+
const suspicious = ['/etc/', '/dev/', '/proc/', '/sys/', '/boot/'];
|
|
75
|
+
if (suspicious.some((p) => lowered.includes(p))) {
|
|
76
|
+
console.warn(`[launcher] 警告: executablePath 包含敏感系统目录前缀(${executablePath}),请确认路径正确`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// userDataDir 校验:警告非常用位置(避免误指向系统目录)
|
|
80
|
+
if (userDataDir) {
|
|
81
|
+
const lowered = userDataDir.toLowerCase();
|
|
82
|
+
const home = homedir().toLowerCase();
|
|
83
|
+
const tmp = ['/tmp/', '/var/tmp/'];
|
|
84
|
+
const isSafe = lowered.startsWith(home) || tmp.some((p) => lowered.startsWith(p));
|
|
85
|
+
if (!isSafe) {
|
|
86
|
+
console.warn(`[launcher] 警告: userDataDir 不在常见位置(${userDataDir}),建议使用 ~/.mcp-chrome/ 或 /tmp/ 下的目录`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
70
89
|
// 构建启动参数
|
|
71
90
|
const args = this.buildArgs({ port, incognito, headless, userDataDir });
|
|
72
91
|
// 启动进程
|
|
@@ -92,6 +111,8 @@ export class BrowserLauncher {
|
|
|
92
111
|
buildArgs(options) {
|
|
93
112
|
const args = [
|
|
94
113
|
`--remote-debugging-port=${options.port}`,
|
|
114
|
+
// 显式绑定到 loopback,防止 Chrome 在某些平台/版本默认监听全网卡造成端口暴露
|
|
115
|
+
'--remote-debugging-address=127.0.0.1',
|
|
95
116
|
'--no-first-run',
|
|
96
117
|
'--no-default-browser-check',
|
|
97
118
|
'--disable-background-networking',
|
|
@@ -125,9 +146,9 @@ export class BrowserLauncher {
|
|
|
125
146
|
// 必须指定 user-data-dir,否则会复用已运行的 Chrome 实例导致启动失败
|
|
126
147
|
// 默认使用固定目录 ~/.mcp-chrome/profile,保留 cookies 和登录状态
|
|
127
148
|
const userDataDir = options.userDataDir ?? DEFAULT_PROFILE_DIR;
|
|
128
|
-
//
|
|
149
|
+
// 确保目录存在(mode 0o700 限制仅创建者可读)
|
|
129
150
|
if (!existsSync(userDataDir)) {
|
|
130
|
-
mkdirSync(userDataDir, { recursive: true });
|
|
151
|
+
mkdirSync(userDataDir, { recursive: true, mode: 0o700 });
|
|
131
152
|
}
|
|
132
153
|
args.push(`--user-data-dir=${userDataDir}`);
|
|
133
154
|
// 打开一个空白页
|
|
@@ -147,31 +168,37 @@ export class BrowserLauncher {
|
|
|
147
168
|
reject(new TimeoutError(`等待浏览器启动超时 (${timeout}ms)`));
|
|
148
169
|
}, timeout);
|
|
149
170
|
let stderr = '';
|
|
150
|
-
this.process.stderr
|
|
171
|
+
const stderrStream = this.process.stderr;
|
|
172
|
+
const onStderr = (data) => {
|
|
151
173
|
stderr += data.toString();
|
|
152
174
|
// 解析 DevTools listening on ws://...
|
|
153
|
-
const match = stderr.match(/DevTools listening on (ws:\/\/\S+)/);
|
|
175
|
+
const match = stderr.match(/DevTools listening on (?<url>ws:\/\/\S+)/);
|
|
154
176
|
if (match) {
|
|
155
177
|
clearTimeout(timer);
|
|
156
178
|
// 解析端口
|
|
157
|
-
const portMatch = match
|
|
179
|
+
const portMatch = match.groups.url.match(/:(?<port>\d+)\//);
|
|
158
180
|
if (portMatch) {
|
|
159
|
-
this._port = parseInt(portMatch
|
|
181
|
+
this._port = parseInt(portMatch.groups.port, 10);
|
|
160
182
|
}
|
|
161
|
-
|
|
183
|
+
// 端点已拿到,移除 listener 避免后续 stderr 持续累积内存
|
|
184
|
+
stderrStream?.removeListener('data', onStderr);
|
|
185
|
+
resolve(match.groups.url);
|
|
162
186
|
}
|
|
163
|
-
}
|
|
187
|
+
};
|
|
188
|
+
stderrStream?.on('data', onStderr);
|
|
164
189
|
this.process.on('error', (error) => {
|
|
165
190
|
clearTimeout(timer);
|
|
191
|
+
stderrStream?.removeListener('data', onStderr);
|
|
166
192
|
reject(error);
|
|
167
193
|
});
|
|
168
194
|
this.process.on('exit', (code) => {
|
|
169
195
|
clearTimeout(timer);
|
|
196
|
+
stderrStream?.removeListener('data', onStderr);
|
|
170
197
|
if (code === 0) {
|
|
171
198
|
// Chrome 退出码 0:通常是把请求委托给了已运行的实例后自行退出,
|
|
172
199
|
// 此时没有 DevTools 端点可连接
|
|
173
|
-
reject(new Error('浏览器进程已退出(code 0),可能已有相同 profile 的 Chrome
|
|
174
|
-
|
|
200
|
+
reject(new Error('浏览器进程已退出(code 0),可能已有相同 profile 的 Chrome 实例在运行\n' +
|
|
201
|
+
'请关闭已运行的 Chrome 或指定不同的 userDataDir'));
|
|
175
202
|
}
|
|
176
203
|
else if (code !== null) {
|
|
177
204
|
reject(new Error(`浏览器进程退出,代码: ${code}\n${stderr}`));
|
package/dist/cdp/launcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auto-wait.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - waitForStableBoundingBox: 等待位置稳定
|
|
7
7
|
* - ensureInViewport: 确保元素在视口内
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* 核心思想:操作前自动检查元素状态,失败则重试,而非立即报错
|
|
10
10
|
*/
|
|
11
11
|
import type { CDPClient } from '../cdp/client.js';
|
|
12
12
|
/**
|
|
@@ -67,7 +67,7 @@ export declare class AutoWait {
|
|
|
67
67
|
/**
|
|
68
68
|
* 发送 CDP 命令
|
|
69
69
|
*
|
|
70
|
-
* 使用 deadline
|
|
70
|
+
* 使用 deadline 剩余时间,确保单命令不超出整体预算
|
|
71
71
|
*/
|
|
72
72
|
private send;
|
|
73
73
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-wait.d.ts","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"auto-wait.d.ts","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,qBAAa,QAAQ;IAKb,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IALrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAGrB,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,EACzB,OAAO,GAAE,eAAoB;IAMjC;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD;;;;;OAKG;IACG,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC7D;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnD;;;;OAIG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD;;;;OAIG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,CAAC,SAAS;CAGpB"}
|
package/dist/core/auto-wait.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - waitForStableBoundingBox: 等待位置稳定
|
|
7
7
|
* - ensureInViewport: 确保元素在视口内
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* 核心思想:操作前自动检查元素状态,失败则重试,而非立即报错
|
|
10
10
|
*/
|
|
11
11
|
import { withRetry } from './retry.js';
|
|
12
12
|
import { DEFAULT_TIMEOUT } from './types.js';
|
|
@@ -160,7 +160,7 @@ export class AutoWait {
|
|
|
160
160
|
/**
|
|
161
161
|
* 发送 CDP 命令
|
|
162
162
|
*
|
|
163
|
-
* 使用 deadline
|
|
163
|
+
* 使用 deadline 剩余时间,确保单命令不超出整体预算
|
|
164
164
|
*/
|
|
165
165
|
send(method, params) {
|
|
166
166
|
return this.cdp.send(method, params, this.sessionId, this.remaining());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-wait.js","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"auto-wait.js","sourceRoot":"","sources":["../../src/core/auto-wait.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IBrowserDriver — 浏览器驱动抽象接口
|
|
3
|
+
*
|
|
4
|
+
* 定义 ExtensionBridge 和 SessionManager 的共同操作契约,
|
|
5
|
+
* UnifiedSessionManager 通过此接口消除 Extension/CDP 双路分支
|
|
6
|
+
*
|
|
7
|
+
* 迁移完成:UnifiedSessionManager 通过 driver 屏蔽 Extension/CDP 差异,
|
|
8
|
+
* 业务操作统一走 driver.X,状态管理(getDriver/ensureExtensionConnected)保留作为入口
|
|
9
|
+
*/
|
|
10
|
+
import type { ConsoleLogEntry, NetworkRequestEntry } from './types.js';
|
|
11
|
+
export interface NavigateOptions {
|
|
12
|
+
wait?: 'load' | 'domcontentloaded' | 'networkidle';
|
|
13
|
+
timeout?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface GoBackResult {
|
|
16
|
+
navigated: boolean;
|
|
17
|
+
url?: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ScreenshotOptions {
|
|
21
|
+
fullPage?: boolean;
|
|
22
|
+
scale?: number;
|
|
23
|
+
format?: 'png' | 'jpeg' | 'webp' | string;
|
|
24
|
+
quality?: number;
|
|
25
|
+
clip?: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface ScreenshotResult {
|
|
33
|
+
data: string;
|
|
34
|
+
format: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ConsoleLogOptions {
|
|
37
|
+
level?: string;
|
|
38
|
+
pattern?: string;
|
|
39
|
+
clear?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface NetworkRequestOptions {
|
|
42
|
+
urlPattern?: string;
|
|
43
|
+
clear?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface CookieFilter {
|
|
46
|
+
url?: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
domain?: string;
|
|
49
|
+
path?: string;
|
|
50
|
+
secure?: boolean;
|
|
51
|
+
session?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface SetCookieParams {
|
|
54
|
+
name: string;
|
|
55
|
+
value: string;
|
|
56
|
+
url?: string;
|
|
57
|
+
domain?: string;
|
|
58
|
+
path?: string;
|
|
59
|
+
httpOnly?: boolean;
|
|
60
|
+
secure?: boolean;
|
|
61
|
+
sameSite?: string;
|
|
62
|
+
expirationDate?: number;
|
|
63
|
+
session?: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface FindResult {
|
|
66
|
+
refId: string;
|
|
67
|
+
tag: string;
|
|
68
|
+
text: string;
|
|
69
|
+
rect: {
|
|
70
|
+
x: number;
|
|
71
|
+
y: number;
|
|
72
|
+
width: number;
|
|
73
|
+
height: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export interface ImageInfo {
|
|
77
|
+
index: number;
|
|
78
|
+
src: string;
|
|
79
|
+
dataSrc: string;
|
|
80
|
+
alt: string;
|
|
81
|
+
width: number;
|
|
82
|
+
height: number;
|
|
83
|
+
naturalWidth: number;
|
|
84
|
+
naturalHeight: number;
|
|
85
|
+
}
|
|
86
|
+
export interface HtmlWithImagesResult {
|
|
87
|
+
html: string;
|
|
88
|
+
images: ImageInfo[];
|
|
89
|
+
}
|
|
90
|
+
export interface ReadPageResult {
|
|
91
|
+
pageContent: string;
|
|
92
|
+
viewport: {
|
|
93
|
+
width: number;
|
|
94
|
+
height: number;
|
|
95
|
+
};
|
|
96
|
+
error?: string;
|
|
97
|
+
}
|
|
98
|
+
export interface ReadPageOptions {
|
|
99
|
+
filter?: string;
|
|
100
|
+
depth?: number;
|
|
101
|
+
maxLength?: number;
|
|
102
|
+
refId?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface ActionableClickResult {
|
|
105
|
+
success: boolean;
|
|
106
|
+
error?: string;
|
|
107
|
+
reason?: string;
|
|
108
|
+
coveringElement?: string;
|
|
109
|
+
}
|
|
110
|
+
export interface DispatchInputResult {
|
|
111
|
+
success: boolean;
|
|
112
|
+
error?: string;
|
|
113
|
+
}
|
|
114
|
+
export interface DragAndDropResult {
|
|
115
|
+
success: boolean;
|
|
116
|
+
error?: string;
|
|
117
|
+
code?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface InputKeyOptions {
|
|
120
|
+
key?: string;
|
|
121
|
+
code?: string;
|
|
122
|
+
text?: string;
|
|
123
|
+
unmodifiedText?: string;
|
|
124
|
+
location?: number;
|
|
125
|
+
isKeypad?: boolean;
|
|
126
|
+
autoRepeat?: boolean;
|
|
127
|
+
windowsVirtualKeyCode?: number;
|
|
128
|
+
modifiers?: number;
|
|
129
|
+
commands?: string[];
|
|
130
|
+
}
|
|
131
|
+
export type InputKeyType = 'keyDown' | 'keyUp' | 'rawKeyDown' | 'char';
|
|
132
|
+
export type InputMouseType = 'mousePressed' | 'mouseReleased' | 'mouseMoved' | 'mouseWheel';
|
|
133
|
+
export type InputTouchType = 'touchStart' | 'touchMove' | 'touchEnd' | 'touchCancel';
|
|
134
|
+
export interface InputMouseOptions {
|
|
135
|
+
button?: 'left' | 'middle' | 'right' | 'back' | 'forward' | 'none';
|
|
136
|
+
clickCount?: number;
|
|
137
|
+
deltaX?: number;
|
|
138
|
+
deltaY?: number;
|
|
139
|
+
modifiers?: number;
|
|
140
|
+
}
|
|
141
|
+
export interface InputTouchPoint {
|
|
142
|
+
x: number;
|
|
143
|
+
y: number;
|
|
144
|
+
radiusX?: number;
|
|
145
|
+
radiusY?: number;
|
|
146
|
+
force?: number;
|
|
147
|
+
id?: number;
|
|
148
|
+
}
|
|
149
|
+
export interface FrameResolveResult {
|
|
150
|
+
frameId: number;
|
|
151
|
+
offset: {
|
|
152
|
+
x: number;
|
|
153
|
+
y: number;
|
|
154
|
+
} | null;
|
|
155
|
+
}
|
|
156
|
+
export interface DriverState {
|
|
157
|
+
url: string;
|
|
158
|
+
title: string;
|
|
159
|
+
}
|
|
160
|
+
export interface ListedTarget {
|
|
161
|
+
id: number | string;
|
|
162
|
+
targetId?: string;
|
|
163
|
+
url: string;
|
|
164
|
+
title: string;
|
|
165
|
+
type?: string;
|
|
166
|
+
active?: boolean;
|
|
167
|
+
windowId?: number;
|
|
168
|
+
index?: number;
|
|
169
|
+
groupId?: number;
|
|
170
|
+
pinned?: boolean;
|
|
171
|
+
incognito?: boolean;
|
|
172
|
+
managed?: boolean;
|
|
173
|
+
status?: string;
|
|
174
|
+
}
|
|
175
|
+
export interface NewTabResult {
|
|
176
|
+
targetId: string;
|
|
177
|
+
url: string;
|
|
178
|
+
title: string;
|
|
179
|
+
type?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 浏览器驱动接口
|
|
183
|
+
*
|
|
184
|
+
* 实现者:ExtensionBridge(bridge.ts),SessionManager(session.ts)
|
|
185
|
+
* 消费者:UnifiedSessionManager(unified-session.ts)
|
|
186
|
+
*
|
|
187
|
+
* 设计约定:
|
|
188
|
+
* - Extension 独有的能力(refId 操作、stealth、iframe、actionable、dispatch、drag/drop)
|
|
189
|
+
* 在 CDP 实现里 throw(保持业务语义而非伪造结果)
|
|
190
|
+
* - precise 输入接口(inputKey/inputMouse/inputTouch/inputType)两侧实现一致语义
|
|
191
|
+
* - modifiers 由调用方维护并通过 options 传入,driver 不持有键盘修饰键状态
|
|
192
|
+
*/
|
|
193
|
+
export interface IBrowserDriver {
|
|
194
|
+
navigate(url: string, options?: NavigateOptions): Promise<void>;
|
|
195
|
+
goBack(timeout?: number): Promise<GoBackResult>;
|
|
196
|
+
goForward(timeout?: number): Promise<GoBackResult>;
|
|
197
|
+
reload(ignoreCache?: boolean, waitUntil?: string, timeout?: number): Promise<void>;
|
|
198
|
+
screenshot(options?: ScreenshotOptions): Promise<ScreenshotResult>;
|
|
199
|
+
readPage(options?: ReadPageOptions): Promise<ReadPageResult>;
|
|
200
|
+
getPageHtml(selector?: string, outer?: boolean): Promise<string>;
|
|
201
|
+
getPageText(selector?: string): Promise<string>;
|
|
202
|
+
getHtmlWithImages(selector?: string, outer?: boolean): Promise<HtmlWithImagesResult>;
|
|
203
|
+
getMetadata(): Promise<Record<string, unknown>>;
|
|
204
|
+
find(selector?: string, text?: string, xpath?: string, timeout?: number): Promise<FindResult[]>;
|
|
205
|
+
/** Extension 真做;CDP throw(CDP 模式应通过 input 工具坐标点击) */
|
|
206
|
+
click(refId: string): Promise<void>;
|
|
207
|
+
actionableClick(refId: string, force?: boolean): Promise<ActionableClickResult>;
|
|
208
|
+
dispatchInput(refId: string, text: string): Promise<DispatchInputResult>;
|
|
209
|
+
dragAndDrop(srcRefId: string, dstRefId: string): Promise<DragAndDropResult>;
|
|
210
|
+
getComputedStyle(refId: string, prop: string): Promise<string | null>;
|
|
211
|
+
typeRef(refId: string, text: string, clear?: boolean): Promise<void>;
|
|
212
|
+
scrollAt(x: number, y: number, refId?: string): Promise<void>;
|
|
213
|
+
getAttribute(selector: string | undefined, refId: string | undefined, attribute: string): Promise<string | null>;
|
|
214
|
+
inputKey(type: InputKeyType, options?: InputKeyOptions): Promise<void>;
|
|
215
|
+
inputMouse(type: InputMouseType, x: number, y: number, options?: InputMouseOptions): Promise<void>;
|
|
216
|
+
inputTouch(type: InputTouchType, touchPoints: InputTouchPoint[]): Promise<void>;
|
|
217
|
+
inputType(text: string, delay?: number): Promise<void>;
|
|
218
|
+
stealthKey(key: string, type: 'down' | 'up' | 'press', modifiers: string[]): Promise<void>;
|
|
219
|
+
stealthClick(x: number, y: number, button?: string, clickCount?: number, refId?: string): Promise<void>;
|
|
220
|
+
stealthMouse(type: string, x: number, y: number, button?: string): Promise<void>;
|
|
221
|
+
stealthType(text: string, delay?: number): Promise<void>;
|
|
222
|
+
stealthInject(): Promise<void>;
|
|
223
|
+
getCookies(filter?: CookieFilter): Promise<Array<{
|
|
224
|
+
name: string;
|
|
225
|
+
value: string;
|
|
226
|
+
domain: string;
|
|
227
|
+
path: string;
|
|
228
|
+
httpOnly: boolean;
|
|
229
|
+
secure: boolean;
|
|
230
|
+
sameSite?: string;
|
|
231
|
+
expirationDate?: number;
|
|
232
|
+
session?: boolean;
|
|
233
|
+
}>>;
|
|
234
|
+
setCookie(params: SetCookieParams): Promise<void>;
|
|
235
|
+
deleteCookie(url: string, name: string): Promise<void>;
|
|
236
|
+
/**
|
|
237
|
+
* 清除 cookies,合同条款:filter 必须至少含 url/domain/name 中的一项,
|
|
238
|
+
* 实现层应拒绝无过滤的全站清除(防止误清登录态)
|
|
239
|
+
*/
|
|
240
|
+
clearCookies(filter?: CookieFilter): Promise<{
|
|
241
|
+
count: number;
|
|
242
|
+
}>;
|
|
243
|
+
consoleEnable(): Promise<void>;
|
|
244
|
+
networkEnable(): Promise<void>;
|
|
245
|
+
getConsoleLogs(options?: ConsoleLogOptions): Promise<ConsoleLogEntry[]>;
|
|
246
|
+
getNetworkRequests(options?: NetworkRequestOptions): Promise<NetworkRequestEntry[]>;
|
|
247
|
+
listTargets(): Promise<ListedTarget[]>;
|
|
248
|
+
newPage(url?: string, timeout?: number): Promise<NewTabResult>;
|
|
249
|
+
closePage(targetId?: string): Promise<void>;
|
|
250
|
+
activatePage(targetId: string): Promise<void>;
|
|
251
|
+
selectPage(targetId: string): Promise<void>;
|
|
252
|
+
getCurrentTargetId(): string | null;
|
|
253
|
+
setCurrentTargetId(targetId: string | null): void;
|
|
254
|
+
getState(): DriverState | null;
|
|
255
|
+
/** 仅 Extension 模式支持;CDP throw */
|
|
256
|
+
resolveFrame(frame: string | number): Promise<FrameResolveResult>;
|
|
257
|
+
getCurrentFrameId(): number;
|
|
258
|
+
setCurrentFrameId(frameId: number): void;
|
|
259
|
+
/**
|
|
260
|
+
* 在指定 iframe 中执行 JS(precise 模式,Extension 通过 contextId 绕过 CSP),
|
|
261
|
+
* CDP 实现 throw 'iframe 穿透需要 Extension 模式'
|
|
262
|
+
*/
|
|
263
|
+
evaluateInFrame(frameId: number, expression: string, timeout?: number): Promise<{
|
|
264
|
+
result?: {
|
|
265
|
+
value?: unknown;
|
|
266
|
+
};
|
|
267
|
+
exceptionDetails?: {
|
|
268
|
+
text: string;
|
|
269
|
+
exception?: {
|
|
270
|
+
className?: string;
|
|
271
|
+
description?: string;
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
}>;
|
|
275
|
+
/**
|
|
276
|
+
* 发送 CDP 命令;
|
|
277
|
+
* Extension:经 chrome.debugger.sendCommand 转发;
|
|
278
|
+
* CDP:自动识别 browser-level 域(Target/Browser/SystemInfo/DeviceAccess/IO)走 sendBrowserCommand,其他走 send
|
|
279
|
+
*/
|
|
280
|
+
debuggerSend(method: string, params?: Record<string, unknown>, tabId?: number, timeout?: number): Promise<unknown>;
|
|
281
|
+
/**
|
|
282
|
+
* 执行 JS 代码(一次性调用),返回 JSON 反序列化的结果,
|
|
283
|
+
* Extension stealth 路径:通过 chrome.scripting.executeScript(受 CSP 限制);
|
|
284
|
+
* Extension precise 路径:通过 debugger.Runtime.evaluate(绕 CSP);
|
|
285
|
+
* CDP:通过 Runtime.evaluate / callFunctionOn
|
|
286
|
+
*/
|
|
287
|
+
evaluate(code: string, args?: unknown[], timeout?: number): Promise<unknown>;
|
|
288
|
+
}
|
|
289
|
+
/** 类型守卫:判断是否为 Extension 实现 */
|
|
290
|
+
export interface IExtensionDriverExtras {
|
|
291
|
+
/** Extension 模式特有:等待 WebSocket 重连 */
|
|
292
|
+
waitForConnection(timeout?: number): Promise<boolean>;
|
|
293
|
+
/** Extension 模式特有:是否已连接 */
|
|
294
|
+
isConnected(): boolean;
|
|
295
|
+
/** Extension 模式特有:当前 tabId(chrome tab 数字 ID) */
|
|
296
|
+
getCurrentTabIdNumber?(): number | null;
|
|
297
|
+
/** Extension 模式特有:直接设置 tabId(绕过 attach) */
|
|
298
|
+
setCurrentTabIdNumber?(tabId: number | null): void;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* 当某个接口能力在当前 driver 实现下不可用时抛出,
|
|
302
|
+
* 上层 (UnifiedSessionManager) 据此分支 fallback 或转换错误信息
|
|
303
|
+
*/
|
|
304
|
+
export declare class DriverCapabilityError extends Error {
|
|
305
|
+
constructor(message: string);
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=browser-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-driver.d.ts","sourceRoot":"","sources":["../../src/core/browser-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IBrowserDriver — 浏览器驱动抽象接口
|
|
3
|
+
*
|
|
4
|
+
* 定义 ExtensionBridge 和 SessionManager 的共同操作契约,
|
|
5
|
+
* UnifiedSessionManager 通过此接口消除 Extension/CDP 双路分支
|
|
6
|
+
*
|
|
7
|
+
* 迁移完成:UnifiedSessionManager 通过 driver 屏蔽 Extension/CDP 差异,
|
|
8
|
+
* 业务操作统一走 driver.X,状态管理(getDriver/ensureExtensionConnected)保留作为入口
|
|
9
|
+
*/
|
|
10
|
+
// ==================== 通用错误 ====================
|
|
11
|
+
/**
|
|
12
|
+
* 当某个接口能力在当前 driver 实现下不可用时抛出,
|
|
13
|
+
* 上层 (UnifiedSessionManager) 据此分支 fallback 或转换错误信息
|
|
14
|
+
*/
|
|
15
|
+
export class DriverCapabilityError extends Error {
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'DriverCapabilityError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=browser-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-driver.js","sourceRoot":"","sources":["../../src/core/browser-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwUH,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACvC,CAAC;CACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误信息脱敏
|
|
3
|
+
*
|
|
4
|
+
* 在错误信息向 MCP 客户端 / Extension popup / 日志返回前剥离敏感路径
|
|
5
|
+
*
|
|
6
|
+
* 覆盖:
|
|
7
|
+
* - file:// 与本地绝对路径(/home/<user>、/Users/<user>、C:\Users\<user>)
|
|
8
|
+
* - chrome-extension://<id>/<path>
|
|
9
|
+
* - V8 stack frame 行号信息
|
|
10
|
+
* - 用户家目录残留
|
|
11
|
+
*
|
|
12
|
+
* 不覆盖(保留追溯能力):
|
|
13
|
+
* - 错误类型(ENOENT、EACCES)
|
|
14
|
+
* - HTTP/CDP method 名
|
|
15
|
+
* - 用户输入的资源标识(URL、tabId、refId)— 这些已经是用户已知值
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* 对错误信息做脱敏,可对 string 或 Error 调用,返回脱敏后的 string
|
|
19
|
+
*/
|
|
20
|
+
export declare function sanitizeErrorMessage(input: unknown): string;
|
|
21
|
+
/**
|
|
22
|
+
* 对错误对象做脱敏,返回 string(用于直接拼到 message 字段)
|
|
23
|
+
*/
|
|
24
|
+
export declare function sanitizeError(err: unknown): string;
|
|
25
|
+
//# sourceMappingURL=error-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAkC3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKlD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误信息脱敏
|
|
3
|
+
*
|
|
4
|
+
* 在错误信息向 MCP 客户端 / Extension popup / 日志返回前剥离敏感路径
|
|
5
|
+
*
|
|
6
|
+
* 覆盖:
|
|
7
|
+
* - file:// 与本地绝对路径(/home/<user>、/Users/<user>、C:\Users\<user>)
|
|
8
|
+
* - chrome-extension://<id>/<path>
|
|
9
|
+
* - V8 stack frame 行号信息
|
|
10
|
+
* - 用户家目录残留
|
|
11
|
+
*
|
|
12
|
+
* 不覆盖(保留追溯能力):
|
|
13
|
+
* - 错误类型(ENOENT、EACCES)
|
|
14
|
+
* - HTTP/CDP method 名
|
|
15
|
+
* - 用户输入的资源标识(URL、tabId、refId)— 这些已经是用户已知值
|
|
16
|
+
*/
|
|
17
|
+
import * as os from 'os';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
const homeDir = os.homedir();
|
|
20
|
+
const username = path.basename(homeDir);
|
|
21
|
+
const REDACT = '<redacted>';
|
|
22
|
+
/**
|
|
23
|
+
* 对错误信息做脱敏,可对 string 或 Error 调用,返回脱敏后的 string
|
|
24
|
+
*/
|
|
25
|
+
export function sanitizeErrorMessage(input) {
|
|
26
|
+
let msg;
|
|
27
|
+
if (input instanceof Error) {
|
|
28
|
+
msg = input.message;
|
|
29
|
+
}
|
|
30
|
+
else if (typeof input === 'string') {
|
|
31
|
+
msg = input;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return String(input);
|
|
35
|
+
}
|
|
36
|
+
// 替换家目录路径(含 file:// 前缀和不带前缀两种)
|
|
37
|
+
if (homeDir) {
|
|
38
|
+
const escapedHome = homeDir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
39
|
+
msg = msg.replace(new RegExp(`file://${escapedHome}`, 'g'), `file://${REDACT}`);
|
|
40
|
+
msg = msg.replace(new RegExp(escapedHome, 'g'), REDACT);
|
|
41
|
+
}
|
|
42
|
+
if (username && username.length >= 2) {
|
|
43
|
+
// 替换 /home/<user>/ /Users/<user>/ C:\Users\<user>\ 的非家目录残留
|
|
44
|
+
const userEsc = username.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
45
|
+
msg = msg.replace(new RegExp(`/home/${userEsc}\\b`, 'g'), `/home/${REDACT}`);
|
|
46
|
+
msg = msg.replace(new RegExp(`/Users/${userEsc}\\b`, 'g'), `/Users/${REDACT}`);
|
|
47
|
+
msg = msg.replace(new RegExp(`\\\\Users\\\\${userEsc}\\b`, 'g'), `\\Users\\${REDACT}`);
|
|
48
|
+
}
|
|
49
|
+
// chrome-extension://<id>/<path> → chrome-extension://<id>/<redacted>
|
|
50
|
+
msg = msg.replace(/chrome-extension:\/\/([a-z0-9]{32})\/[^\s)"']*/g, 'chrome-extension://$1/<redacted>');
|
|
51
|
+
// V8 stack frame: " at func (file:line:col)" → " at func (...)"
|
|
52
|
+
msg = msg.replace(/\(([^)]*\.[jt]s):\d+:\d+\)/g, '($1)');
|
|
53
|
+
// node:internal stack 中的绝对路径
|
|
54
|
+
msg = msg.replace(/at\s+\/[^\s:]+:\d+:\d+/g, 'at <internal>');
|
|
55
|
+
return msg;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 对错误对象做脱敏,返回 string(用于直接拼到 message 字段)
|
|
59
|
+
*/
|
|
60
|
+
export function sanitizeError(err) {
|
|
61
|
+
if (err instanceof Error) {
|
|
62
|
+
return sanitizeErrorMessage(err);
|
|
63
|
+
}
|
|
64
|
+
return sanitizeErrorMessage(String(err));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=error-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../../src/core/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;AAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAEvC,MAAM,MAAM,GAAG,YAAY,CAAA;AAE3B;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAC/C,IAAI,GAAW,CAAA;IACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,GAAG,GAAG,KAAK,CAAC,OAAO,CAAA;IACvB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACnC,GAAG,GAAG,KAAK,CAAA;IACf,CAAC;SAAM,CAAC;QACJ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;QAClE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC,CAAA;QAC/E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnC,2DAA2D;QAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;QAC/D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;QAC5E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE,UAAU,MAAM,EAAE,CAAC,CAAA;QAC9E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,gBAAgB,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE,YAAY,MAAM,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,sEAAsE;IACtE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iDAAiD,EAAE,kCAAkC,CAAC,CAAA;IAExG,gEAAgE;IAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;IAExD,6BAA6B;IAC7B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAA;IAE7D,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5C,CAAC"}
|