@mt0926/node-network-devtools 0.1.2 → 0.1.3

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.
Files changed (41) hide show
  1. package/README.md +91 -19
  2. package/README.zh-CN.md +95 -23
  3. package/dist/esm/adapters/axios.js +2 -0
  4. package/dist/esm/adapters/axios.js.map +1 -0
  5. package/dist/esm/config.js +14 -6
  6. package/dist/esm/config.js.map +1 -1
  7. package/dist/esm/gui/browser-detector.js +256 -0
  8. package/dist/esm/gui/browser-detector.js.map +1 -0
  9. package/dist/esm/gui/browser-launcher.js +265 -78
  10. package/dist/esm/gui/browser-launcher.js.map +1 -1
  11. package/dist/esm/gui/server.js.map +1 -1
  12. package/dist/esm/index.js +6 -10
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/interceptors/http-patcher.js +68 -3
  15. package/dist/esm/interceptors/http-patcher.js.map +1 -1
  16. package/dist/esm/interceptors/undici-patcher.js +20 -0
  17. package/dist/esm/interceptors/undici-patcher.js.map +1 -1
  18. package/dist/esm/register.js +5 -47
  19. package/dist/esm/register.js.map +1 -1
  20. package/dist/types/adapters/axios.d.ts +2 -0
  21. package/dist/types/adapters/axios.d.ts.map +1 -0
  22. package/dist/types/config.d.ts +15 -6
  23. package/dist/types/config.d.ts.map +1 -1
  24. package/dist/types/gui/browser-detector.d.ts +68 -0
  25. package/dist/types/gui/browser-detector.d.ts.map +1 -0
  26. package/dist/types/gui/browser-launcher.d.ts +58 -13
  27. package/dist/types/gui/browser-launcher.d.ts.map +1 -1
  28. package/dist/types/gui/server.d.ts +0 -1
  29. package/dist/types/gui/server.d.ts.map +1 -1
  30. package/dist/types/index.d.ts +2 -3
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/interceptors/http-patcher.d.ts.map +1 -1
  33. package/dist/types/interceptors/undici-patcher.d.ts.map +1 -1
  34. package/dist/types/register.d.ts +2 -6
  35. package/dist/types/register.d.ts.map +1 -1
  36. package/package.json +1 -5
  37. package/BUILD.md +0 -204
  38. package/dist/esm/cdp/cdp-bridge.js +0 -312
  39. package/dist/esm/cdp/cdp-bridge.js.map +0 -1
  40. package/dist/types/cdp/cdp-bridge.d.ts +0 -86
  41. package/dist/types/cdp/cdp-bridge.d.ts.map +0 -1
@@ -1,312 +0,0 @@
1
- /**
2
- * CDP 桥接模块
3
- *
4
- * 将请求数据转换为 CDP Network 事件并发送到 Chrome DevTools
5
- *
6
- * 注意:Network 事件广播功能需要:
7
- * 1. Node.js 20.18.0+ 版本
8
- * 2. --experimental-network-inspection 标志
9
- * 3. Chrome DevTools 目前还不支持显示这些事件(功能请求待实现)
10
- *
11
- * 当前实现会将事件发送到控制台作为备选方案
12
- */
13
- import * as inspector from 'node:inspector';
14
- import { getConfig } from '../config.js';
15
- // 检查 Network API 是否可用
16
- const hasNetworkAPI = typeof inspector.Network?.requestWillBeSent === 'function';
17
- /**
18
- * CDP Bridge 实现
19
- */
20
- class CDPBridgeImpl {
21
- session = null;
22
- connected = false;
23
- /**
24
- * 连接到 Inspector
25
- */
26
- async connect() {
27
- if (this.connected)
28
- return;
29
- try {
30
- this.session = new inspector.Session();
31
- this.session.connect();
32
- // 启用 Network 域
33
- await this.post('Network.enable', {});
34
- this.connected = true;
35
- }
36
- catch (error) {
37
- this.session = null;
38
- this.connected = false;
39
- throw error;
40
- }
41
- }
42
- /**
43
- * 断开连接
44
- */
45
- disconnect() {
46
- if (this.session) {
47
- try {
48
- this.session.disconnect();
49
- }
50
- catch {
51
- // 忽略断开连接时的错误
52
- }
53
- this.session = null;
54
- }
55
- this.connected = false;
56
- }
57
- /**
58
- * 检查是否已连接
59
- */
60
- isConnected() {
61
- return this.connected;
62
- }
63
- /**
64
- * 发送 CDP 命令
65
- */
66
- post(method, params) {
67
- return new Promise((resolve, reject) => {
68
- if (!this.session) {
69
- reject(new Error('Session not connected'));
70
- return;
71
- }
72
- this.session.post(method, params, (err, result) => {
73
- if (err)
74
- reject(err);
75
- else
76
- resolve(result);
77
- });
78
- });
79
- }
80
- /**
81
- * 脱敏请求头
82
- */
83
- sanitizeHeaders(headers) {
84
- const config = getConfig();
85
- const redactHeaders = config.redactHeaders.map(h => h.toLowerCase());
86
- const sanitized = {};
87
- for (const [key, value] of Object.entries(headers)) {
88
- const lowerKey = key.toLowerCase();
89
- const strValue = Array.isArray(value) ? value.join(', ') : value;
90
- if (redactHeaders.includes(lowerKey)) {
91
- if (lowerKey === 'authorization') {
92
- // 保留 scheme,脱敏 credentials
93
- const parts = strValue.split(' ');
94
- sanitized[key] = parts.length > 1 ? `${parts[0]} [REDACTED]` : '[REDACTED]';
95
- }
96
- else {
97
- sanitized[key] = '[REDACTED]';
98
- }
99
- }
100
- else {
101
- sanitized[key] = strValue;
102
- }
103
- }
104
- return sanitized;
105
- }
106
- /**
107
- * 解析堆栈追踪为 CDP CallFrame 格式
108
- */
109
- parseStackTrace(stackTrace) {
110
- const callFrames = [];
111
- const lines = stackTrace.split('\n');
112
- for (const line of lines) {
113
- // 匹配格式: " at functionName (file:line:column)"
114
- // 或: " at file:line:column"
115
- const match = line.match(/^\s*at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/);
116
- if (match) {
117
- const [, functionName, url, lineNumber, columnNumber] = match;
118
- // 跳过 node_modules 和内部模块
119
- if (url.includes('node_modules') || url.startsWith('node:')) {
120
- continue;
121
- }
122
- callFrames.push({
123
- functionName: functionName || '(anonymous)',
124
- scriptId: '0', // V8 会分配实际的 scriptId
125
- url: url.startsWith('file://') ? url : `file://${url}`,
126
- lineNumber: parseInt(lineNumber, 10) - 1, // CDP 使用 0-based 行号
127
- columnNumber: parseInt(columnNumber, 10) - 1,
128
- });
129
- }
130
- }
131
- return { callFrames };
132
- }
133
- /**
134
- * 从 Content-Type 头提取 MIME 类型
135
- */
136
- getMimeType(headers) {
137
- const contentType = headers['content-type'] || headers['Content-Type'];
138
- if (!contentType)
139
- return 'text/plain';
140
- const value = Array.isArray(contentType) ? contentType[0] : contentType;
141
- // 提取 MIME 类型,去掉 charset 等参数
142
- return value.split(';')[0].trim();
143
- }
144
- /**
145
- * 发送 Network.requestWillBeSent 事件
146
- *
147
- * 注意:需要 Node.js 20.18.0+ 和 --experimental-network-inspection 标志
148
- */
149
- emitRequestWillBeSent(request) {
150
- if (!this.connected)
151
- return;
152
- try {
153
- const cdpRequest = {
154
- url: request.url,
155
- method: request.method,
156
- headers: this.sanitizeHeaders(request.headers),
157
- };
158
- // 处理请求体
159
- if (request.body) {
160
- cdpRequest.hasPostData = true;
161
- cdpRequest.postData = Buffer.isBuffer(request.body)
162
- ? request.body.toString('utf-8')
163
- : request.body;
164
- }
165
- const event = {
166
- requestId: request.id,
167
- loaderId: request.traceId || request.id,
168
- documentURL: request.url,
169
- request: cdpRequest,
170
- timestamp: request.timestamp / 1000,
171
- wallTime: request.timestamp / 1000,
172
- initiator: {
173
- type: 'script',
174
- stack: this.parseStackTrace(request.stackTrace),
175
- },
176
- type: 'Fetch',
177
- };
178
- // 尝试使用 inspector.Network API 广播事件
179
- if (hasNetworkAPI) {
180
- inspector.Network.requestWillBeSent(event);
181
- }
182
- }
183
- catch {
184
- // 忽略发送事件时的错误
185
- }
186
- }
187
- /**
188
- * 发送 Network.responseReceived 事件
189
- */
190
- emitResponseReceived(requestId, request, response) {
191
- if (!this.connected)
192
- return;
193
- try {
194
- const cdpResponse = {
195
- url: request.url,
196
- status: response.statusCode,
197
- statusText: response.statusMessage,
198
- headers: this.sanitizeHeaders(response.headers),
199
- mimeType: this.getMimeType(response.headers),
200
- connectionReused: false,
201
- connectionId: 0,
202
- encodedDataLength: 0,
203
- securityState: request.url.startsWith('https') ? 'secure' : 'insecure',
204
- };
205
- const event = {
206
- requestId,
207
- loaderId: request.traceId || requestId,
208
- timestamp: Date.now() / 1000,
209
- type: 'Fetch',
210
- response: cdpResponse,
211
- };
212
- if (hasNetworkAPI) {
213
- inspector.Network.responseReceived(event);
214
- }
215
- }
216
- catch {
217
- // 忽略发送事件时的错误
218
- }
219
- }
220
- /**
221
- * 发送 Network.loadingFinished 事件
222
- */
223
- emitLoadingFinished(requestId, _timing) {
224
- if (!this.connected)
225
- return;
226
- try {
227
- const event = {
228
- requestId,
229
- timestamp: Date.now() / 1000,
230
- encodedDataLength: 0,
231
- };
232
- if (hasNetworkAPI) {
233
- inspector.Network.loadingFinished(event);
234
- }
235
- }
236
- catch {
237
- // 忽略发送事件时的错误
238
- }
239
- }
240
- /**
241
- * 发送 Network.loadingFailed 事件
242
- */
243
- emitLoadingFailed(requestId, error) {
244
- if (!this.connected)
245
- return;
246
- try {
247
- const event = {
248
- requestId,
249
- timestamp: Date.now() / 1000,
250
- type: 'Fetch',
251
- errorText: error.message,
252
- canceled: false,
253
- blockedReason: undefined,
254
- };
255
- if (hasNetworkAPI) {
256
- inspector.Network.loadingFailed(event);
257
- }
258
- }
259
- catch {
260
- // 忽略发送事件时的错误
261
- }
262
- }
263
- }
264
- // 全局单例
265
- let globalBridge = null;
266
- /**
267
- * 获取全局 CDP Bridge 实例
268
- */
269
- export function getCDPBridge() {
270
- if (!globalBridge) {
271
- globalBridge = new CDPBridgeImpl();
272
- }
273
- return globalBridge;
274
- }
275
- /**
276
- * 重置全局 CDP Bridge(用于测试)
277
- */
278
- export function resetCDPBridge() {
279
- if (globalBridge) {
280
- globalBridge.disconnect();
281
- }
282
- globalBridge = null;
283
- }
284
- /**
285
- * 创建新的 CDP Bridge 实例(用于测试)
286
- */
287
- export function createCDPBridge() {
288
- return new CDPBridgeImpl();
289
- }
290
- /**
291
- * 检查 Inspector 是否已启用
292
- */
293
- export function isInspectorEnabled() {
294
- try {
295
- return inspector.url?.() !== undefined;
296
- }
297
- catch {
298
- return false;
299
- }
300
- }
301
- /**
302
- * 获取 Inspector URL
303
- */
304
- export function getInspectorUrl() {
305
- try {
306
- return inspector.url?.();
307
- }
308
- catch {
309
- return undefined;
310
- }
311
- }
312
- //# sourceMappingURL=cdp-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdp-bridge.js","sourceRoot":"","sources":["../../../src/cdp/cdp-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- /**
2
- * CDP 桥接模块
3
- *
4
- * 将请求数据转换为 CDP Network 事件并发送到 Chrome DevTools
5
- *
6
- * 注意:Network 事件广播功能需要:
7
- * 1. Node.js 20.18.0+ 版本
8
- * 2. --experimental-network-inspection 标志
9
- * 3. Chrome DevTools 目前还不支持显示这些事件(功能请求待实现)
10
- *
11
- * 当前实现会将事件发送到控制台作为备选方案
12
- */
13
- import type { RequestData, ResponseData, ErrorData, TimingData } from '../store/ring-buffer.js';
14
- /**
15
- * CDP 堆栈帧
16
- */
17
- export interface CDPCallFrame {
18
- functionName: string;
19
- scriptId: string;
20
- url: string;
21
- lineNumber: number;
22
- columnNumber: number;
23
- }
24
- /**
25
- * CDP 堆栈追踪
26
- */
27
- export interface CDPStackTrace {
28
- callFrames: CDPCallFrame[];
29
- }
30
- /**
31
- * CDP 请求对象
32
- */
33
- export interface CDPRequest {
34
- url: string;
35
- method: string;
36
- headers: Record<string, string>;
37
- postData?: string;
38
- hasPostData?: boolean;
39
- }
40
- /**
41
- * CDP 响应对象
42
- */
43
- export interface CDPResponse {
44
- url: string;
45
- status: number;
46
- statusText: string;
47
- headers: Record<string, string>;
48
- mimeType: string;
49
- connectionReused: boolean;
50
- connectionId: number;
51
- encodedDataLength: number;
52
- securityState: string;
53
- }
54
- /**
55
- * CDP Bridge 接口
56
- */
57
- export interface ICDPBridge {
58
- connect(): Promise<void>;
59
- disconnect(): void;
60
- isConnected(): boolean;
61
- emitRequestWillBeSent(request: RequestData): void;
62
- emitResponseReceived(requestId: string, request: RequestData, response: ResponseData): void;
63
- emitLoadingFinished(requestId: string, timing?: TimingData): void;
64
- emitLoadingFailed(requestId: string, error: ErrorData): void;
65
- }
66
- /**
67
- * 获取全局 CDP Bridge 实例
68
- */
69
- export declare function getCDPBridge(): ICDPBridge;
70
- /**
71
- * 重置全局 CDP Bridge(用于测试)
72
- */
73
- export declare function resetCDPBridge(): void;
74
- /**
75
- * 创建新的 CDP Bridge 实例(用于测试)
76
- */
77
- export declare function createCDPBridge(): ICDPBridge;
78
- /**
79
- * 检查 Inspector 是否已启用
80
- */
81
- export declare function isInspectorEnabled(): boolean;
82
- /**
83
- * 获取 Inspector URL
84
- */
85
- export declare function getInspectorUrl(): string | undefined;
86
- //# sourceMappingURL=cdp-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdp-bridge.d.ts","sourceRoot":"","sources":["../../../src/cdp/cdp-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKhG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,IAAI,OAAO,CAAC;IACvB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5F,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAClE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9D;AAgRD;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,CAKzC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAMpD"}