weixin-devtools-mcp 0.0.1 → 0.1.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/LICENSE +21 -0
- package/README.md +101 -114
- package/build/MiniProgramContext.d.ts +307 -0
- package/build/MiniProgramContext.d.ts.map +1 -0
- package/build/MiniProgramContext.js +650 -0
- package/build/MiniProgramContext.js.map +1 -0
- package/build/collectors/Collector.d.ts +127 -0
- package/build/collectors/Collector.d.ts.map +1 -0
- package/build/collectors/Collector.js +252 -0
- package/build/collectors/Collector.js.map +1 -0
- package/build/collectors/ConsoleCollector.d.ts +104 -0
- package/build/collectors/ConsoleCollector.d.ts.map +1 -0
- package/build/collectors/ConsoleCollector.js +157 -0
- package/build/collectors/ConsoleCollector.js.map +1 -0
- package/build/collectors/NetworkCollector.d.ts +167 -0
- package/build/collectors/NetworkCollector.d.ts.map +1 -0
- package/build/collectors/NetworkCollector.js +265 -0
- package/build/collectors/NetworkCollector.js.map +1 -0
- package/build/collectors/index.d.ts +13 -0
- package/build/collectors/index.d.ts.map +1 -0
- package/build/collectors/index.js +17 -0
- package/build/collectors/index.js.map +1 -0
- package/build/config/tool-profile.d.ts +30 -0
- package/build/config/tool-profile.d.ts.map +1 -0
- package/build/config/tool-profile.js +138 -0
- package/build/config/tool-profile.js.map +1 -0
- package/build/connection/adapters.d.ts +3 -0
- package/build/connection/adapters.d.ts.map +1 -0
- package/build/connection/adapters.js +134 -0
- package/build/connection/adapters.js.map +1 -0
- package/build/connection/errors.d.ts +34 -0
- package/build/connection/errors.d.ts.map +1 -0
- package/build/connection/errors.js +101 -0
- package/build/connection/errors.js.map +1 -0
- package/build/connection/health-probe.d.ts +4 -0
- package/build/connection/health-probe.d.ts.map +1 -0
- package/build/connection/health-probe.js +60 -0
- package/build/connection/health-probe.js.map +1 -0
- package/build/connection/index.d.ts +6 -0
- package/build/connection/index.d.ts.map +1 -0
- package/build/connection/index.js +6 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/manager.d.ts +19 -0
- package/build/connection/manager.d.ts.map +1 -0
- package/build/connection/manager.js +198 -0
- package/build/connection/manager.js.map +1 -0
- package/build/connection/resolver.d.ts +3 -0
- package/build/connection/resolver.d.ts.map +1 -0
- package/build/connection/resolver.js +96 -0
- package/build/connection/resolver.js.map +1 -0
- package/build/connection/types.d.ts +95 -0
- package/build/connection/types.d.ts.map +1 -0
- package/build/connection/types.js +16 -0
- package/build/connection/types.js.map +1 -0
- package/build/formatters/consoleFormatter.d.ts +50 -0
- package/build/formatters/consoleFormatter.d.ts.map +1 -0
- package/build/formatters/consoleFormatter.js +116 -0
- package/build/formatters/consoleFormatter.js.map +1 -0
- package/build/formatters/snapshotFormatter.d.ts +41 -0
- package/build/formatters/snapshotFormatter.d.ts.map +1 -0
- package/build/formatters/snapshotFormatter.js +156 -0
- package/build/formatters/snapshotFormatter.js.map +1 -0
- package/build/index.d.ts +11 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +45 -9
- package/build/index.js.map +1 -0
- package/build/server.d.ts +7 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +70 -30
- package/build/server.js.map +1 -0
- package/build/tools/ToolDefinition.d.ts +215 -0
- package/build/tools/ToolDefinition.d.ts.map +1 -0
- package/build/tools/ToolDefinition.js +9 -7
- package/build/tools/ToolDefinition.js.map +1 -0
- package/build/tools/assert.d.ts +17 -0
- package/build/tools/assert.d.ts.map +1 -0
- package/build/tools/assert.js +8 -88
- package/build/tools/assert.js.map +1 -0
- package/build/tools/connection.d.ts +13 -0
- package/build/tools/connection.d.ts.map +1 -0
- package/build/tools/connection.js +332 -615
- package/build/tools/connection.js.map +1 -0
- package/build/tools/console.d.ts +20 -0
- package/build/tools/console.d.ts.map +1 -0
- package/build/tools/console.js +162 -152
- package/build/tools/console.js.map +1 -0
- package/build/tools/diagnose.d.ts +22 -0
- package/build/tools/diagnose.d.ts.map +1 -0
- package/build/tools/diagnose.js +400 -13
- package/build/tools/diagnose.js.map +1 -0
- package/build/tools/index.d.ts +6 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +3 -77
- package/build/tools/index.js.map +1 -0
- package/build/tools/input.d.ts +21 -0
- package/build/tools/input.d.ts.map +1 -0
- package/build/tools/input.js +73 -139
- package/build/tools/input.js.map +1 -0
- package/build/tools/navigate.d.ts +21 -0
- package/build/tools/navigate.d.ts.map +1 -0
- package/build/tools/navigate.js +63 -126
- package/build/tools/navigate.js.map +1 -0
- package/build/tools/network.d.ts +17 -0
- package/build/tools/network.d.ts.map +1 -0
- package/build/tools/network.js +75 -887
- package/build/tools/network.js.map +1 -0
- package/build/tools/page.d.ts +13 -0
- package/build/tools/page.d.ts.map +1 -0
- package/build/tools/page.js +4 -1
- package/build/tools/page.js.map +1 -0
- package/build/tools/screenshot.d.ts +9 -0
- package/build/tools/screenshot.d.ts.map +1 -0
- package/build/tools/screenshot.js +3 -1
- package/build/tools/screenshot.js.map +1 -0
- package/build/tools/script.d.ts +6 -0
- package/build/tools/script.d.ts.map +1 -0
- package/build/tools/script.js +92 -0
- package/build/tools/script.js.map +1 -0
- package/build/tools/snapshot.d.ts +9 -0
- package/build/tools/snapshot.d.ts.map +1 -0
- package/build/tools/snapshot.js +78 -12
- package/build/tools/snapshot.js.map +1 -0
- package/build/tools/tools.d.ts +15 -0
- package/build/tools/tools.d.ts.map +1 -0
- package/build/tools/tools.js +62 -0
- package/build/tools/tools.js.map +1 -0
- package/build/tools.d.ts +431 -0
- package/build/tools.d.ts.map +1 -0
- package/build/tools.js +235 -117
- package/build/tools.js.map +1 -0
- package/build/types/errors.d.ts +189 -0
- package/build/types/errors.d.ts.map +1 -0
- package/build/types/errors.js +257 -0
- package/build/types/errors.js.map +1 -0
- package/build/utils/idGenerator.d.ts +21 -0
- package/build/utils/idGenerator.d.ts.map +1 -0
- package/build/utils/idGenerator.js +23 -0
- package/build/utils/idGenerator.js.map +1 -0
- package/package.json +34 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/connection/adapters.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAqLpB,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,uBAAuB,CAAC,CAoBlC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import automator from 'miniprogram-automator';
|
|
2
|
+
import { connectDevtoolsEnhanced, detectIDEPort, } from '../tools.js';
|
|
3
|
+
import { EnvironmentConnectionError, ProtocolConnectionError, SessionConflictConnectionError, } from './errors.js';
|
|
4
|
+
function extractMessage(error) {
|
|
5
|
+
return error.message.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
function buildEnhancedOptions(request, mode) {
|
|
8
|
+
return {
|
|
9
|
+
projectPath: request.projectPath ?? '',
|
|
10
|
+
mode,
|
|
11
|
+
cliPath: request.cliPath,
|
|
12
|
+
autoPort: request.autoPort,
|
|
13
|
+
timeout: request.timeoutMs,
|
|
14
|
+
fallbackMode: request.fallback.length > 0,
|
|
15
|
+
healthCheck: false,
|
|
16
|
+
verbose: request.verbose,
|
|
17
|
+
autoAudits: request.autoAudits,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function ensurePagePath(pagePath) {
|
|
21
|
+
if (!pagePath) {
|
|
22
|
+
throw new ProtocolConnectionError('连接成功但当前页面路径为空', [
|
|
23
|
+
'请确认开发者工具中项目已成功打开',
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
return pagePath;
|
|
27
|
+
}
|
|
28
|
+
async function connectByEnhancedMode(request, strategy) {
|
|
29
|
+
try {
|
|
30
|
+
const result = await connectDevtoolsEnhanced(buildEnhancedOptions(request, strategy));
|
|
31
|
+
const endpoint = result.processInfo?.port
|
|
32
|
+
? `ws://127.0.0.1:${result.processInfo.port}`
|
|
33
|
+
: null;
|
|
34
|
+
const pagePath = ensurePagePath(result.pagePath);
|
|
35
|
+
return {
|
|
36
|
+
strategyUsed: strategy,
|
|
37
|
+
endpoint,
|
|
38
|
+
miniProgram: result.miniProgram,
|
|
39
|
+
currentPage: result.currentPage,
|
|
40
|
+
pagePath,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const baseError = error instanceof Error ? error : new Error(String(error));
|
|
45
|
+
const message = extractMessage(baseError);
|
|
46
|
+
if (message.includes('session') || message.includes('already') || message.includes('conflict')) {
|
|
47
|
+
throw new SessionConflictConnectionError(baseError.message, undefined, baseError);
|
|
48
|
+
}
|
|
49
|
+
throw new EnvironmentConnectionError(baseError.message, 'connect', ['检查 projectPath、cliPath 与微信开发者工具启动状态'], { strategy }, baseError);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function connectByWsEndpoint(request, wsEndpoint, strategyUsed) {
|
|
53
|
+
try {
|
|
54
|
+
const miniProgram = await automator.connect({ wsEndpoint, timeout: request.timeoutMs });
|
|
55
|
+
const currentPage = await miniProgram.currentPage();
|
|
56
|
+
if (!currentPage) {
|
|
57
|
+
throw new ProtocolConnectionError('wsEndpoint 已连接但 currentPage 不可用', [
|
|
58
|
+
'确认目标 DevTools 实例已打开小程序项目',
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
const pagePath = ensurePagePath(await currentPage.path);
|
|
62
|
+
return {
|
|
63
|
+
strategyUsed,
|
|
64
|
+
endpoint: wsEndpoint,
|
|
65
|
+
miniProgram,
|
|
66
|
+
currentPage,
|
|
67
|
+
pagePath,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const baseError = error instanceof Error ? error : new Error(String(error));
|
|
72
|
+
throw new ProtocolConnectionError(baseError.message, ['确认 wsEndpoint 可访问,且端点属于微信开发者工具自动化端口'], { wsEndpoint, strategy: strategyUsed }, baseError);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function parseWebSocketDebuggerUrl(payload) {
|
|
76
|
+
const endpoint = payload.webSocketDebuggerUrl ?? payload.websocketDebuggerUrl;
|
|
77
|
+
if (!endpoint) {
|
|
78
|
+
throw new EnvironmentConnectionError('browserUrl 未返回 webSocketDebuggerUrl', 'connect', ['确认目标地址支持 /json/version 并开启远程调试']);
|
|
79
|
+
}
|
|
80
|
+
return endpoint;
|
|
81
|
+
}
|
|
82
|
+
async function resolveWsEndpointByBrowserUrl(browserUrl, timeoutMs) {
|
|
83
|
+
const normalizedBase = browserUrl.endsWith('/') ? browserUrl.slice(0, -1) : browserUrl;
|
|
84
|
+
const versionUrl = `${normalizedBase}/json/version`;
|
|
85
|
+
let response;
|
|
86
|
+
try {
|
|
87
|
+
response = await fetch(versionUrl, {
|
|
88
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const baseError = error instanceof Error ? error : new Error(String(error));
|
|
93
|
+
throw new EnvironmentConnectionError(`请求 browserUrl 失败: ${baseError.message}`, 'connect', ['确认 browserUrl 可访问,例如 http://127.0.0.1:9222'], { browserUrl }, baseError);
|
|
94
|
+
}
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw new EnvironmentConnectionError(`browserUrl 返回非成功状态: ${response.status}`, 'connect', ['确认远程调试服务已开启并允许访问 /json/version'], { browserUrl, status: response.status });
|
|
97
|
+
}
|
|
98
|
+
const payload = await response.json();
|
|
99
|
+
return parseWebSocketDebuggerUrl(payload);
|
|
100
|
+
}
|
|
101
|
+
async function connectByBrowserUrl(request, browserUrl) {
|
|
102
|
+
const endpoint = await resolveWsEndpointByBrowserUrl(browserUrl, request.timeoutMs);
|
|
103
|
+
return connectByWsEndpoint(request, endpoint, 'browserUrl');
|
|
104
|
+
}
|
|
105
|
+
async function connectByDiscover(request) {
|
|
106
|
+
const port = await detectIDEPort(request.verbose);
|
|
107
|
+
if (port === null) {
|
|
108
|
+
throw new EnvironmentConnectionError('自动发现失败:未检测到可用的微信开发者工具自动化端口', 'startup', [
|
|
109
|
+
'先在微信开发者工具中开启自动化能力',
|
|
110
|
+
'改用 strategy=launch 并传入 projectPath',
|
|
111
|
+
]);
|
|
112
|
+
}
|
|
113
|
+
const endpoint = `ws://127.0.0.1:${port}`;
|
|
114
|
+
return connectByWsEndpoint(request, endpoint, 'discover');
|
|
115
|
+
}
|
|
116
|
+
export async function executeConnectionStrategy(strategy, request) {
|
|
117
|
+
if (strategy === 'auto' || strategy === 'launch' || strategy === 'connect') {
|
|
118
|
+
return connectByEnhancedMode(request, strategy);
|
|
119
|
+
}
|
|
120
|
+
if (strategy === 'wsEndpoint') {
|
|
121
|
+
if (!request.wsEndpoint) {
|
|
122
|
+
throw new EnvironmentConnectionError('wsEndpoint 策略缺少 wsEndpoint 参数', 'resolve');
|
|
123
|
+
}
|
|
124
|
+
return connectByWsEndpoint(request, request.wsEndpoint, strategy);
|
|
125
|
+
}
|
|
126
|
+
if (strategy === 'browserUrl') {
|
|
127
|
+
if (!request.browserUrl) {
|
|
128
|
+
throw new EnvironmentConnectionError('browserUrl 策略缺少 browserUrl 参数', 'resolve');
|
|
129
|
+
}
|
|
130
|
+
return connectByBrowserUrl(request, request.browserUrl);
|
|
131
|
+
}
|
|
132
|
+
return connectByDiscover(request);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/connection/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ConnectionErrorSummary, ConnectionPhase, MetadataValue } from './types.js';
|
|
2
|
+
export type ConnectionErrorCode = 'INVALID_ARGUMENT' | 'ENVIRONMENT' | 'SESSION_CONFLICT' | 'PROTOCOL' | 'HEALTH_CHECK_FAILED' | 'CONNECTION_FAILED' | 'DISCONNECTED';
|
|
3
|
+
export interface ConnectionErrorOptions {
|
|
4
|
+
code: ConnectionErrorCode;
|
|
5
|
+
phase: ConnectionPhase;
|
|
6
|
+
suggestions?: string[];
|
|
7
|
+
metadata?: Record<string, MetadataValue>;
|
|
8
|
+
cause?: Error;
|
|
9
|
+
}
|
|
10
|
+
export declare class ConnectionError extends Error {
|
|
11
|
+
readonly code: ConnectionErrorCode;
|
|
12
|
+
readonly phase: ConnectionPhase;
|
|
13
|
+
readonly suggestions: string[];
|
|
14
|
+
readonly metadata?: Record<string, MetadataValue>;
|
|
15
|
+
constructor(message: string, options: ConnectionErrorOptions);
|
|
16
|
+
toSummary(): ConnectionErrorSummary;
|
|
17
|
+
}
|
|
18
|
+
export declare class ValidationConnectionError extends ConnectionError {
|
|
19
|
+
constructor(message: string, suggestions?: string[], metadata?: Record<string, MetadataValue>);
|
|
20
|
+
}
|
|
21
|
+
export declare class EnvironmentConnectionError extends ConnectionError {
|
|
22
|
+
constructor(message: string, phase: Extract<ConnectionPhase, 'startup' | 'connect' | 'resolve'>, suggestions?: string[], metadata?: Record<string, MetadataValue>, cause?: Error);
|
|
23
|
+
}
|
|
24
|
+
export declare class ProtocolConnectionError extends ConnectionError {
|
|
25
|
+
constructor(message: string, suggestions?: string[], metadata?: Record<string, MetadataValue>, cause?: Error);
|
|
26
|
+
}
|
|
27
|
+
export declare class SessionConflictConnectionError extends ConnectionError {
|
|
28
|
+
constructor(message: string, metadata?: Record<string, MetadataValue>, cause?: Error);
|
|
29
|
+
}
|
|
30
|
+
export declare class HealthCheckConnectionError extends ConnectionError {
|
|
31
|
+
constructor(message: string, metadata?: Record<string, MetadataValue>, cause?: Error);
|
|
32
|
+
}
|
|
33
|
+
export declare function normalizeConnectionError(error: Error | ConnectionError): ConnectionError;
|
|
34
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/connection/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAC3B,kBAAkB,GAClB,aAAa,GACb,kBAAkB,GAClB,UAAU,GACV,qBAAqB,GACrB,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAS5D,SAAS,IAAI,sBAAsB;CAUpC;AAED,qBAAa,yBAA0B,SAAQ,eAAe;gBAE1D,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;CAU3C;AAED,qBAAa,0BAA2B,SAAQ,eAAe;gBAE3D,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,EAClE,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACxC,KAAK,CAAC,EAAE,KAAK;CAWhB;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAExD,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACxC,KAAK,CAAC,EAAE,KAAK;CAWhB;AAED,qBAAa,8BAA+B,SAAQ,eAAe;gBACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK;CAarF;AAED,qBAAa,0BAA2B,SAAQ,eAAe;gBACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK;CAarF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,GAAG,eAAe,CAWxF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export class ConnectionError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
phase;
|
|
4
|
+
suggestions;
|
|
5
|
+
metadata;
|
|
6
|
+
constructor(message, options) {
|
|
7
|
+
super(message, options.cause ? { cause: options.cause } : undefined);
|
|
8
|
+
this.name = 'ConnectionError';
|
|
9
|
+
this.code = options.code;
|
|
10
|
+
this.phase = options.phase;
|
|
11
|
+
this.suggestions = options.suggestions ?? [];
|
|
12
|
+
this.metadata = options.metadata;
|
|
13
|
+
}
|
|
14
|
+
toSummary() {
|
|
15
|
+
return {
|
|
16
|
+
code: this.code,
|
|
17
|
+
phase: this.phase,
|
|
18
|
+
message: this.message,
|
|
19
|
+
suggestions: this.suggestions,
|
|
20
|
+
metadata: this.metadata,
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ValidationConnectionError extends ConnectionError {
|
|
26
|
+
constructor(message, suggestions, metadata) {
|
|
27
|
+
super(message, {
|
|
28
|
+
code: 'INVALID_ARGUMENT',
|
|
29
|
+
phase: 'resolve',
|
|
30
|
+
suggestions,
|
|
31
|
+
metadata,
|
|
32
|
+
});
|
|
33
|
+
this.name = 'ValidationConnectionError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class EnvironmentConnectionError extends ConnectionError {
|
|
37
|
+
constructor(message, phase, suggestions, metadata, cause) {
|
|
38
|
+
super(message, {
|
|
39
|
+
code: 'ENVIRONMENT',
|
|
40
|
+
phase,
|
|
41
|
+
suggestions,
|
|
42
|
+
metadata,
|
|
43
|
+
cause,
|
|
44
|
+
});
|
|
45
|
+
this.name = 'EnvironmentConnectionError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class ProtocolConnectionError extends ConnectionError {
|
|
49
|
+
constructor(message, suggestions, metadata, cause) {
|
|
50
|
+
super(message, {
|
|
51
|
+
code: 'PROTOCOL',
|
|
52
|
+
phase: 'connect',
|
|
53
|
+
suggestions,
|
|
54
|
+
metadata,
|
|
55
|
+
cause,
|
|
56
|
+
});
|
|
57
|
+
this.name = 'ProtocolConnectionError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export class SessionConflictConnectionError extends ConnectionError {
|
|
61
|
+
constructor(message, metadata, cause) {
|
|
62
|
+
super(message, {
|
|
63
|
+
code: 'SESSION_CONFLICT',
|
|
64
|
+
phase: 'startup',
|
|
65
|
+
suggestions: [
|
|
66
|
+
'关闭当前微信开发者工具窗口后重试',
|
|
67
|
+
'切换到 wsEndpoint 或 discover 策略复用现有会话',
|
|
68
|
+
],
|
|
69
|
+
metadata,
|
|
70
|
+
cause,
|
|
71
|
+
});
|
|
72
|
+
this.name = 'SessionConflictConnectionError';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export class HealthCheckConnectionError extends ConnectionError {
|
|
76
|
+
constructor(message, metadata, cause) {
|
|
77
|
+
super(message, {
|
|
78
|
+
code: 'HEALTH_CHECK_FAILED',
|
|
79
|
+
phase: 'health_check',
|
|
80
|
+
suggestions: [
|
|
81
|
+
'检查开发者工具是否仍在运行',
|
|
82
|
+
'使用 reconnect_devtools 重新建立连接',
|
|
83
|
+
],
|
|
84
|
+
metadata,
|
|
85
|
+
cause,
|
|
86
|
+
});
|
|
87
|
+
this.name = 'HealthCheckConnectionError';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function normalizeConnectionError(error) {
|
|
91
|
+
if (error instanceof ConnectionError) {
|
|
92
|
+
return error;
|
|
93
|
+
}
|
|
94
|
+
return new ConnectionError(error.message, {
|
|
95
|
+
code: 'CONNECTION_FAILED',
|
|
96
|
+
phase: 'connect',
|
|
97
|
+
suggestions: ['请检查连接参数并重试'],
|
|
98
|
+
cause: error,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/connection/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-probe.d.ts","sourceRoot":"","sources":["../../src/connection/health-probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAwCpB,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+B/F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
async function runCheck(name, execute) {
|
|
2
|
+
const start = Date.now();
|
|
3
|
+
try {
|
|
4
|
+
const result = await execute();
|
|
5
|
+
return {
|
|
6
|
+
name,
|
|
7
|
+
status: result.passed ? 'pass' : 'fail',
|
|
8
|
+
message: result.message,
|
|
9
|
+
durationMs: Date.now() - start,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
14
|
+
return {
|
|
15
|
+
name,
|
|
16
|
+
status: 'fail',
|
|
17
|
+
message,
|
|
18
|
+
durationMs: Date.now() - start,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function resolveLevel(checks) {
|
|
23
|
+
const failures = checks.filter(check => check.status === 'fail').length;
|
|
24
|
+
if (failures === 0) {
|
|
25
|
+
return 'healthy';
|
|
26
|
+
}
|
|
27
|
+
const transportCheck = checks.find(check => check.name === 'transport');
|
|
28
|
+
if (!transportCheck || transportCheck.status === 'fail') {
|
|
29
|
+
return 'unhealthy';
|
|
30
|
+
}
|
|
31
|
+
return 'degraded';
|
|
32
|
+
}
|
|
33
|
+
export async function probeConnectionHealth(miniProgram) {
|
|
34
|
+
const checks = [];
|
|
35
|
+
checks.push(await runCheck('transport', async () => {
|
|
36
|
+
await miniProgram.evaluate(() => true);
|
|
37
|
+
return { passed: true, message: 'evaluate 调用成功' };
|
|
38
|
+
}));
|
|
39
|
+
let pagePath = '';
|
|
40
|
+
checks.push(await runCheck('session', async () => {
|
|
41
|
+
const page = await miniProgram.currentPage();
|
|
42
|
+
if (!page) {
|
|
43
|
+
return { passed: false, message: 'currentPage 为空' };
|
|
44
|
+
}
|
|
45
|
+
pagePath = await page.path;
|
|
46
|
+
return { passed: true, message: 'currentPage 可访问' };
|
|
47
|
+
}));
|
|
48
|
+
checks.push(await runCheck('page', async () => {
|
|
49
|
+
if (!pagePath) {
|
|
50
|
+
return { passed: false, message: '页面路径为空' };
|
|
51
|
+
}
|
|
52
|
+
return { passed: true, message: `当前页面: ${pagePath}` };
|
|
53
|
+
}));
|
|
54
|
+
return {
|
|
55
|
+
level: resolveLevel(checks),
|
|
56
|
+
checks,
|
|
57
|
+
checkedAt: new Date().toISOString(),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=health-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-probe.js","sourceRoot":"","sources":["../../src/connection/health-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MiniProgram, Page } from 'miniprogram-automator';
|
|
2
|
+
import { type ConnectionConnectResult, type ConnectionErrorSummary, type ConnectionRequest, type ConnectionStatusSnapshot, type ResolvedConnectionRequest } from './types.js';
|
|
3
|
+
interface StoredSession {
|
|
4
|
+
miniProgram: MiniProgram;
|
|
5
|
+
currentPage: Page;
|
|
6
|
+
}
|
|
7
|
+
export declare class ConnectionManager {
|
|
8
|
+
#private;
|
|
9
|
+
getSession(): StoredSession | null;
|
|
10
|
+
getStatusSnapshot(): ConnectionStatusSnapshot;
|
|
11
|
+
getLastRequest(): ResolvedConnectionRequest | null;
|
|
12
|
+
connect(request: ConnectionRequest): Promise<ConnectionConnectResult>;
|
|
13
|
+
reconnect(request?: ConnectionRequest): Promise<ConnectionConnectResult>;
|
|
14
|
+
disconnect(): Promise<ConnectionStatusSnapshot>;
|
|
15
|
+
refreshHealth(): Promise<ConnectionStatusSnapshot>;
|
|
16
|
+
markDisconnectedWithError(error: ConnectionErrorSummary): ConnectionStatusSnapshot;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/connection/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAY/D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,YAAY,CAAC;AAEpB,UAAU,aAAa;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,IAAI,CAAC;CACnB;AAmBD,qBAAa,iBAAiB;;IAK5B,UAAU,IAAI,aAAa,GAAG,IAAI;IAIlC,iBAAiB,IAAI,wBAAwB;IAI7C,cAAc,IAAI,yBAAyB,GAAG,IAAI;IAI5C,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgGrE,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAcxE,UAAU,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAwB/C,aAAa,IAAI,OAAO,CAAC,wBAAwB,CAAC;IA0CxD,yBAAyB,CAAC,KAAK,EAAE,sBAAsB,GAAG,wBAAwB;CAQnF"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { executeConnectionStrategy } from './adapters.js';
|
|
2
|
+
import { HealthCheckConnectionError, ValidationConnectionError, normalizeConnectionError, } from './errors.js';
|
|
3
|
+
import { probeConnectionHealth } from './health-probe.js';
|
|
4
|
+
import { resolveConnectionPlan } from './resolver.js';
|
|
5
|
+
import { createDisconnectedStatus, } from './types.js';
|
|
6
|
+
function createConnectionId() {
|
|
7
|
+
return `conn_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
|
|
8
|
+
}
|
|
9
|
+
function cloneStatus(status) {
|
|
10
|
+
return {
|
|
11
|
+
...status,
|
|
12
|
+
health: status.health
|
|
13
|
+
? {
|
|
14
|
+
...status.health,
|
|
15
|
+
checks: status.health.checks.map(check => ({ ...check })),
|
|
16
|
+
}
|
|
17
|
+
: null,
|
|
18
|
+
lastError: status.lastError ? { ...status.lastError } : null,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export class ConnectionManager {
|
|
22
|
+
#session = null;
|
|
23
|
+
#status = createDisconnectedStatus();
|
|
24
|
+
#lastRequest = null;
|
|
25
|
+
getSession() {
|
|
26
|
+
return this.#session;
|
|
27
|
+
}
|
|
28
|
+
getStatusSnapshot() {
|
|
29
|
+
return cloneStatus(this.#status);
|
|
30
|
+
}
|
|
31
|
+
getLastRequest() {
|
|
32
|
+
return this.#lastRequest ? { ...this.#lastRequest, fallback: [...this.#lastRequest.fallback] } : null;
|
|
33
|
+
}
|
|
34
|
+
async connect(request) {
|
|
35
|
+
const plan = resolveConnectionPlan(request);
|
|
36
|
+
this.#status = {
|
|
37
|
+
...this.#status,
|
|
38
|
+
state: 'connecting',
|
|
39
|
+
connected: false,
|
|
40
|
+
strategyUsed: null,
|
|
41
|
+
endpoint: null,
|
|
42
|
+
lastError: null,
|
|
43
|
+
};
|
|
44
|
+
const startedAt = Date.now();
|
|
45
|
+
const warnings = [];
|
|
46
|
+
let latestError = null;
|
|
47
|
+
for (const strategy of plan.attempts) {
|
|
48
|
+
const attemptStartedAt = Date.now();
|
|
49
|
+
try {
|
|
50
|
+
const adapterResult = await executeConnectionStrategy(strategy, plan.request);
|
|
51
|
+
const connectMs = Date.now() - attemptStartedAt;
|
|
52
|
+
const healthStart = Date.now();
|
|
53
|
+
const health = plan.request.healthCheck
|
|
54
|
+
? await probeConnectionHealth(adapterResult.miniProgram)
|
|
55
|
+
: {
|
|
56
|
+
level: 'healthy',
|
|
57
|
+
checks: [],
|
|
58
|
+
checkedAt: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
if (health.level === 'unhealthy') {
|
|
61
|
+
throw new HealthCheckConnectionError('连接后健康检查失败', {
|
|
62
|
+
strategy,
|
|
63
|
+
endpoint: adapterResult.endpoint,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const connectionId = createConnectionId();
|
|
67
|
+
const totalMs = Date.now() - startedAt;
|
|
68
|
+
const healthMs = Date.now() - healthStart;
|
|
69
|
+
const pagePath = adapterResult.pagePath;
|
|
70
|
+
const status = health.level === 'healthy' ? 'connected' : 'degraded';
|
|
71
|
+
this.#session = {
|
|
72
|
+
miniProgram: adapterResult.miniProgram,
|
|
73
|
+
currentPage: adapterResult.currentPage,
|
|
74
|
+
};
|
|
75
|
+
this.#lastRequest = {
|
|
76
|
+
...plan.request,
|
|
77
|
+
strategy,
|
|
78
|
+
fallback: plan.request.fallback.filter(item => item !== strategy),
|
|
79
|
+
};
|
|
80
|
+
this.#status = {
|
|
81
|
+
connectionId,
|
|
82
|
+
state: status,
|
|
83
|
+
strategyUsed: adapterResult.strategyUsed,
|
|
84
|
+
endpoint: adapterResult.endpoint,
|
|
85
|
+
connected: true,
|
|
86
|
+
hasCurrentPage: pagePath.length > 0,
|
|
87
|
+
pagePath,
|
|
88
|
+
health,
|
|
89
|
+
lastError: null,
|
|
90
|
+
lastConnectedAt: new Date().toISOString(),
|
|
91
|
+
lastHealthCheckAt: health.checkedAt,
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
...adapterResult,
|
|
95
|
+
connectionId,
|
|
96
|
+
health,
|
|
97
|
+
status,
|
|
98
|
+
timing: {
|
|
99
|
+
totalMs,
|
|
100
|
+
connectMs,
|
|
101
|
+
healthMs,
|
|
102
|
+
},
|
|
103
|
+
warnings,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
latestError = normalizeConnectionError(error instanceof Error ? error : new Error(String(error)));
|
|
108
|
+
warnings.push(`[${strategy}] ${latestError.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (!latestError) {
|
|
112
|
+
latestError = new ValidationConnectionError('未执行任何连接尝试');
|
|
113
|
+
}
|
|
114
|
+
this.#session = null;
|
|
115
|
+
this.#status = {
|
|
116
|
+
...createDisconnectedStatus(),
|
|
117
|
+
lastError: latestError.toSummary(),
|
|
118
|
+
};
|
|
119
|
+
throw latestError;
|
|
120
|
+
}
|
|
121
|
+
async reconnect(request) {
|
|
122
|
+
const baseRequest = request ?? this.#lastRequest;
|
|
123
|
+
if (!baseRequest) {
|
|
124
|
+
throw new ValidationConnectionError('没有可用于重连的历史连接参数', ['调用 reconnect_devtools 时显式传入连接参数']);
|
|
125
|
+
}
|
|
126
|
+
await this.disconnect();
|
|
127
|
+
await new Promise(resolve => setTimeout(resolve, 300));
|
|
128
|
+
return this.connect(baseRequest);
|
|
129
|
+
}
|
|
130
|
+
async disconnect() {
|
|
131
|
+
if (this.#session?.miniProgram) {
|
|
132
|
+
const miniProgram = this.#session.miniProgram;
|
|
133
|
+
try {
|
|
134
|
+
miniProgram.removeAllListeners('console');
|
|
135
|
+
miniProgram.removeAllListeners('exception');
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// 忽略监听器清理异常
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
await miniProgram.disconnect();
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// 忽略断连异常,始终清理本地状态
|
|
145
|
+
}
|
|
146
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
147
|
+
}
|
|
148
|
+
this.#session = null;
|
|
149
|
+
this.#status = createDisconnectedStatus();
|
|
150
|
+
return this.getStatusSnapshot();
|
|
151
|
+
}
|
|
152
|
+
async refreshHealth() {
|
|
153
|
+
if (!this.#session) {
|
|
154
|
+
this.#status = createDisconnectedStatus();
|
|
155
|
+
return this.getStatusSnapshot();
|
|
156
|
+
}
|
|
157
|
+
const health = await probeConnectionHealth(this.#session.miniProgram);
|
|
158
|
+
const levelToState = {
|
|
159
|
+
healthy: 'connected',
|
|
160
|
+
degraded: 'degraded',
|
|
161
|
+
unhealthy: 'disconnected',
|
|
162
|
+
};
|
|
163
|
+
if (health.level === 'unhealthy') {
|
|
164
|
+
this.#session = null;
|
|
165
|
+
this.#status = {
|
|
166
|
+
...createDisconnectedStatus(),
|
|
167
|
+
lastError: {
|
|
168
|
+
code: 'HEALTH_CHECK_FAILED',
|
|
169
|
+
phase: 'health_check',
|
|
170
|
+
message: '连接健康检查失败,已自动标记为断开',
|
|
171
|
+
suggestions: ['调用 connect_devtools 或 reconnect_devtools 重新建立连接'],
|
|
172
|
+
timestamp: new Date().toISOString(),
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
return this.getStatusSnapshot();
|
|
176
|
+
}
|
|
177
|
+
const pagePath = this.#session.currentPage ? await this.#session.currentPage.path : null;
|
|
178
|
+
this.#status = {
|
|
179
|
+
...this.#status,
|
|
180
|
+
state: levelToState[health.level],
|
|
181
|
+
connected: true,
|
|
182
|
+
hasCurrentPage: !!pagePath,
|
|
183
|
+
pagePath,
|
|
184
|
+
health,
|
|
185
|
+
lastHealthCheckAt: health.checkedAt,
|
|
186
|
+
};
|
|
187
|
+
return this.getStatusSnapshot();
|
|
188
|
+
}
|
|
189
|
+
markDisconnectedWithError(error) {
|
|
190
|
+
this.#session = null;
|
|
191
|
+
this.#status = {
|
|
192
|
+
...createDisconnectedStatus(),
|
|
193
|
+
lastError: error,
|
|
194
|
+
};
|
|
195
|
+
return this.getStatusSnapshot();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/connection/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/connection/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAEjB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AA0GpB,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,GAAG,sBAAsB,CA4B3F"}
|