@pyrokine/mcp-chrome 1.0.0 → 1.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.
Files changed (103) hide show
  1. package/README.md +176 -86
  2. package/dist/cdp/client.d.ts +10 -0
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +48 -18
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/cdp/launcher.d.ts.map +1 -1
  7. package/dist/cdp/launcher.js +14 -4
  8. package/dist/cdp/launcher.js.map +1 -1
  9. package/dist/core/auto-wait.d.ts +7 -0
  10. package/dist/core/auto-wait.d.ts.map +1 -1
  11. package/dist/core/auto-wait.js +14 -4
  12. package/dist/core/auto-wait.js.map +1 -1
  13. package/dist/core/errors.d.ts +1 -0
  14. package/dist/core/errors.d.ts.map +1 -1
  15. package/dist/core/errors.js +32 -7
  16. package/dist/core/errors.js.map +1 -1
  17. package/dist/core/index.d.ts +1 -0
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +1 -0
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/locator.d.ts +12 -0
  22. package/dist/core/locator.d.ts.map +1 -1
  23. package/dist/core/locator.js +73 -10
  24. package/dist/core/locator.js.map +1 -1
  25. package/dist/core/session.d.ts +66 -10
  26. package/dist/core/session.d.ts.map +1 -1
  27. package/dist/core/session.js +261 -60
  28. package/dist/core/session.js.map +1 -1
  29. package/dist/core/types.d.ts +11 -0
  30. package/dist/core/types.d.ts.map +1 -1
  31. package/dist/core/types.js +5 -2
  32. package/dist/core/types.js.map +1 -1
  33. package/dist/core/unified-session.d.ts +431 -0
  34. package/dist/core/unified-session.d.ts.map +1 -0
  35. package/dist/core/unified-session.js +1010 -0
  36. package/dist/core/unified-session.js.map +1 -0
  37. package/dist/extension/bridge.d.ts +222 -0
  38. package/dist/extension/bridge.d.ts.map +1 -0
  39. package/dist/extension/bridge.js +421 -0
  40. package/dist/extension/bridge.js.map +1 -0
  41. package/dist/extension/http-server.d.ts +58 -0
  42. package/dist/extension/http-server.d.ts.map +1 -0
  43. package/dist/extension/http-server.js +313 -0
  44. package/dist/extension/http-server.js.map +1 -0
  45. package/dist/extension/index.d.ts +7 -0
  46. package/dist/extension/index.d.ts.map +1 -0
  47. package/dist/extension/index.js +6 -0
  48. package/dist/extension/index.js.map +1 -0
  49. package/dist/extension/native-host-installer.d.ts +21 -0
  50. package/dist/extension/native-host-installer.d.ts.map +1 -0
  51. package/dist/extension/native-host-installer.js +147 -0
  52. package/dist/extension/native-host-installer.js.map +1 -0
  53. package/dist/extension/socket-server.d.ts +32 -0
  54. package/dist/extension/socket-server.d.ts.map +1 -0
  55. package/dist/extension/socket-server.js +177 -0
  56. package/dist/extension/socket-server.js.map +1 -0
  57. package/dist/extension/ws-server.d.ts +40 -0
  58. package/dist/extension/ws-server.d.ts.map +1 -0
  59. package/dist/extension/ws-server.js +246 -0
  60. package/dist/extension/ws-server.js.map +1 -0
  61. package/dist/index.js +6 -4
  62. package/dist/index.js.map +1 -1
  63. package/dist/native-host/index.js +280 -0
  64. package/dist/native-host/mcp-chrome-host +2 -0
  65. package/dist/tools/browse.d.ts +4 -0
  66. package/dist/tools/browse.d.ts.map +1 -1
  67. package/dist/tools/browse.js +137 -25
  68. package/dist/tools/browse.js.map +1 -1
  69. package/dist/tools/cookies.d.ts +33 -25
  70. package/dist/tools/cookies.d.ts.map +1 -1
  71. package/dist/tools/cookies.js +124 -38
  72. package/dist/tools/cookies.js.map +1 -1
  73. package/dist/tools/evaluate.d.ts +15 -0
  74. package/dist/tools/evaluate.d.ts.map +1 -1
  75. package/dist/tools/evaluate.js +87 -23
  76. package/dist/tools/evaluate.js.map +1 -1
  77. package/dist/tools/extract.d.ts +28 -2
  78. package/dist/tools/extract.d.ts.map +1 -1
  79. package/dist/tools/extract.js +319 -198
  80. package/dist/tools/extract.js.map +1 -1
  81. package/dist/tools/input.d.ts +30 -0
  82. package/dist/tools/input.d.ts.map +1 -1
  83. package/dist/tools/input.js +167 -19
  84. package/dist/tools/input.js.map +1 -1
  85. package/dist/tools/logs.d.ts +4 -0
  86. package/dist/tools/logs.d.ts.map +1 -1
  87. package/dist/tools/logs.js +102 -68
  88. package/dist/tools/logs.js.map +1 -1
  89. package/dist/tools/manage.d.ts +16 -0
  90. package/dist/tools/manage.d.ts.map +1 -1
  91. package/dist/tools/manage.js +215 -10
  92. package/dist/tools/manage.js.map +1 -1
  93. package/dist/tools/schema.d.ts +86 -13
  94. package/dist/tools/schema.d.ts.map +1 -1
  95. package/dist/tools/schema.js +240 -1
  96. package/dist/tools/schema.js.map +1 -1
  97. package/dist/tools/wait.d.ts +30 -0
  98. package/dist/tools/wait.d.ts.map +1 -1
  99. package/dist/tools/wait.js +329 -115
  100. package/dist/tools/wait.js.map +1 -1
  101. package/package.json +4 -5
  102. package/scripts/start-chrome-headless.sh +0 -37
  103. package/scripts/start-chrome.sh +0 -41
@@ -10,8 +10,8 @@
10
10
  */
11
11
  import { writeFile } from 'fs/promises';
12
12
  import { z } from 'zod';
13
- import { formatErrorResponse, getSession } from '../core/index.js';
14
- import { targetJsonSchema, targetZodSchema } from './schema.js';
13
+ import { formatErrorResponse, getSession, getUnifiedSession } from '../core/index.js';
14
+ import { targetJsonSchema, targetToFindParams, targetZodSchema } from './schema.js';
15
15
  /**
16
16
  * extract 工具定义
17
17
  */
@@ -38,18 +38,22 @@ export const extractToolDefinition = {
38
38
  type: 'boolean',
39
39
  description: '是否全页面截图(screenshot)',
40
40
  },
41
- selector: {
42
- type: 'string',
43
- description: '限制范围(state)',
44
- },
45
41
  output: {
46
42
  type: 'string',
47
43
  description: '输出文件路径(可选)。若指定,结果写入文件;否则返回内容',
48
44
  },
45
+ tabId: {
46
+ type: 'string',
47
+ description: '目标 Tab ID(可选,仅 Extension 模式)。不指定则使用当前 attach 的 tab。可操作非当前 attach 的 tab。CDP 模式下忽略此参数',
48
+ },
49
49
  timeout: {
50
50
  type: 'number',
51
51
  description: '等待目标元素超时',
52
52
  },
53
+ frame: {
54
+ oneOf: [{ type: 'string' }, { type: 'number' }],
55
+ description: 'iframe 定位(可选,仅 Extension 模式)。CSS 选择器(如 "iframe#main")或索引(如 0)。不指定则在主框架操作',
56
+ },
53
57
  },
54
58
  required: ['type'],
55
59
  },
@@ -62,9 +66,10 @@ const extractSchema = z.object({
62
66
  target: targetZodSchema.optional(),
63
67
  attribute: z.string().optional(),
64
68
  fullPage: z.boolean().optional(),
65
- selector: z.string().optional(),
66
69
  output: z.string().optional(),
70
+ tabId: z.string().optional(),
67
71
  timeout: z.number().optional(),
72
+ frame: z.union([z.string(), z.number()]).optional(),
68
73
  });
69
74
  /**
70
75
  * extract 工具处理器
@@ -72,193 +77,214 @@ const extractSchema = z.object({
72
77
  export async function handleExtract(params) {
73
78
  try {
74
79
  const args = extractSchema.parse(params);
80
+ const unifiedSession = getUnifiedSession();
81
+ const useExtension = unifiedSession.isExtensionConnected();
75
82
  const session = getSession();
76
- switch (args.type) {
77
- case 'text': {
78
- const text = await extractText(session, args.target);
79
- if (args.output) {
80
- await writeFile(args.output, text, 'utf-8');
81
- return {
82
- content: [
83
- {
84
- type: 'text',
85
- text: JSON.stringify({
86
- success: true,
87
- type: 'text',
88
- output: args.output,
89
- size: text.length,
90
- }),
91
- },
92
- ],
93
- };
94
- }
95
- return {
96
- content: [
97
- {
98
- type: 'text',
99
- text: JSON.stringify({
100
- success: true,
101
- type: 'text',
102
- content: text,
103
- }),
104
- },
105
- ],
106
- };
107
- }
108
- case 'html': {
109
- const html = await extractHTML(session, args.target);
110
- if (args.output) {
111
- await writeFile(args.output, html, 'utf-8');
112
- return {
113
- content: [
114
- {
115
- type: 'text',
116
- text: JSON.stringify({
117
- success: true,
118
- type: 'html',
119
- output: args.output,
120
- size: html.length,
121
- }),
122
- },
123
- ],
124
- };
83
+ // tab 并行:临时切换到指定 tab
84
+ return await unifiedSession.withTabId(args.tabId, async () => {
85
+ return await unifiedSession.withFrame(args.frame, async () => {
86
+ // Extension 路径:等待目标元素出现(如果指定了 target + timeout)
87
+ if (useExtension && args.target && args.timeout !== undefined) {
88
+ await waitForTargetExtension(unifiedSession, args.target, args.timeout);
125
89
  }
126
- return {
127
- content: [
128
- {
129
- type: 'text',
130
- text: JSON.stringify({
131
- success: true,
132
- type: 'html',
133
- content: html,
134
- }),
135
- },
136
- ],
137
- };
138
- }
139
- case 'attribute': {
140
- if (!args.target) {
141
- return {
142
- content: [
143
- {
144
- type: 'text',
145
- text: JSON.stringify({
146
- error: {
147
- code: 'INVALID_ARGUMENT',
148
- message: 'attribute 提取需要 target 参数',
90
+ switch (args.type) {
91
+ case 'text': {
92
+ const text = useExtension
93
+ ? await extractTextExtension(unifiedSession, args.target)
94
+ : await extractText(session, args.target, args.timeout);
95
+ if (args.output) {
96
+ await writeFile(args.output, text, 'utf-8');
97
+ return {
98
+ content: [
99
+ {
100
+ type: 'text',
101
+ text: JSON.stringify({
102
+ success: true,
103
+ type: 'text',
104
+ output: args.output,
105
+ size: text.length,
106
+ }),
149
107
  },
150
- }),
151
- },
152
- ],
153
- isError: true,
154
- };
155
- }
156
- if (!args.attribute) {
157
- return {
158
- content: [
159
- {
160
- type: 'text',
161
- text: JSON.stringify({
162
- error: {
163
- code: 'INVALID_ARGUMENT',
164
- message: 'attribute 提取需要 attribute 参数',
108
+ ],
109
+ };
110
+ }
111
+ return {
112
+ content: [
113
+ {
114
+ type: 'text',
115
+ text: JSON.stringify({
116
+ success: true,
117
+ type: 'text',
118
+ content: text,
119
+ }),
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ case 'html': {
125
+ const html = useExtension
126
+ ? await extractHtmlExtension(unifiedSession, args.target)
127
+ : await extractHTML(session, args.target, args.timeout);
128
+ if (args.output) {
129
+ await writeFile(args.output, html, 'utf-8');
130
+ return {
131
+ content: [
132
+ {
133
+ type: 'text',
134
+ text: JSON.stringify({
135
+ success: true,
136
+ type: 'html',
137
+ output: args.output,
138
+ size: html.length,
139
+ }),
165
140
  },
166
- }),
167
- },
168
- ],
169
- isError: true,
170
- };
171
- }
172
- const value = await extractAttribute(session, args.target, args.attribute);
173
- return {
174
- content: [
175
- {
176
- type: 'text',
177
- text: JSON.stringify({
178
- success: true,
179
- type: 'attribute',
180
- attribute: args.attribute,
181
- value,
182
- }),
183
- },
184
- ],
185
- };
186
- }
187
- case 'screenshot': {
188
- const base64 = await session.screenshot(args.fullPage ?? false);
189
- if (args.output) {
190
- // 写入文件
191
- await writeFile(args.output, Buffer.from(base64, 'base64'));
192
- return {
193
- content: [
194
- {
195
- type: 'text',
196
- text: JSON.stringify({
197
- success: true,
198
- type: 'screenshot',
199
- output: args.output,
200
- }),
201
- },
202
- ],
203
- };
204
- }
205
- // 返回 base64 图片
206
- return {
207
- content: [
208
- {
209
- type: 'image',
210
- data: base64,
211
- mimeType: 'image/png',
212
- },
213
- ],
214
- };
215
- }
216
- case 'state': {
217
- const state = await session.getPageState();
218
- if (args.output) {
219
- await writeFile(args.output, JSON.stringify(state, null, 2), 'utf-8');
220
- return {
221
- content: [
222
- {
223
- type: 'text',
224
- text: JSON.stringify({
225
- success: true,
226
- type: 'state',
227
- output: args.output,
228
- }),
229
- },
230
- ],
231
- };
232
- }
233
- return {
234
- content: [
235
- {
236
- type: 'text',
237
- text: JSON.stringify({
238
- success: true,
239
- type: 'state',
240
- state,
241
- }, null, 2),
242
- },
243
- ],
244
- };
245
- }
246
- default:
247
- return {
248
- content: [
249
- {
250
- type: 'text',
251
- text: JSON.stringify({
252
- error: {
253
- code: 'INVALID_ARGUMENT',
254
- message: `未知提取类型: ${args.type}`,
141
+ ],
142
+ };
143
+ }
144
+ return {
145
+ content: [
146
+ {
147
+ type: 'text',
148
+ text: JSON.stringify({
149
+ success: true,
150
+ type: 'html',
151
+ content: html,
152
+ }),
255
153
  },
256
- }),
257
- },
258
- ],
259
- isError: true,
260
- };
261
- }
154
+ ],
155
+ };
156
+ }
157
+ case 'attribute': {
158
+ if (!args.target) {
159
+ return {
160
+ content: [
161
+ {
162
+ type: 'text',
163
+ text: JSON.stringify({
164
+ error: {
165
+ code: 'INVALID_ARGUMENT',
166
+ message: 'attribute 提取需要 target 参数',
167
+ },
168
+ }),
169
+ },
170
+ ],
171
+ isError: true,
172
+ };
173
+ }
174
+ if (!args.attribute) {
175
+ return {
176
+ content: [
177
+ {
178
+ type: 'text',
179
+ text: JSON.stringify({
180
+ error: {
181
+ code: 'INVALID_ARGUMENT',
182
+ message: 'attribute 提取需要 attribute 参数',
183
+ },
184
+ }),
185
+ },
186
+ ],
187
+ isError: true,
188
+ };
189
+ }
190
+ let value;
191
+ if (useExtension) {
192
+ value = await extractAttributeExtension(unifiedSession, args.target, args.attribute);
193
+ }
194
+ else {
195
+ value = await extractAttribute(session, args.target, args.attribute, args.timeout);
196
+ }
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: JSON.stringify({
202
+ success: true,
203
+ type: 'attribute',
204
+ attribute: args.attribute,
205
+ value,
206
+ }),
207
+ },
208
+ ],
209
+ };
210
+ }
211
+ case 'screenshot': {
212
+ const base64 = await unifiedSession.screenshot({ fullPage: args.fullPage ?? false });
213
+ if (args.output) {
214
+ // 写入文件
215
+ await writeFile(args.output, Buffer.from(base64, 'base64'));
216
+ return {
217
+ content: [
218
+ {
219
+ type: 'text',
220
+ text: JSON.stringify({
221
+ success: true,
222
+ type: 'screenshot',
223
+ output: args.output,
224
+ }),
225
+ },
226
+ ],
227
+ };
228
+ }
229
+ // 返回 base64 图片
230
+ return {
231
+ content: [
232
+ {
233
+ type: 'image',
234
+ data: base64,
235
+ mimeType: 'image/png',
236
+ },
237
+ ],
238
+ };
239
+ }
240
+ case 'state': {
241
+ const state = await unifiedSession.readPage();
242
+ if (args.output) {
243
+ await writeFile(args.output, JSON.stringify(state, null, 2), 'utf-8');
244
+ return {
245
+ content: [
246
+ {
247
+ type: 'text',
248
+ text: JSON.stringify({
249
+ success: true,
250
+ type: 'state',
251
+ output: args.output,
252
+ }),
253
+ },
254
+ ],
255
+ };
256
+ }
257
+ return {
258
+ content: [
259
+ {
260
+ type: 'text',
261
+ text: JSON.stringify({
262
+ success: true,
263
+ type: 'state',
264
+ state,
265
+ }, null, 2),
266
+ },
267
+ ],
268
+ };
269
+ }
270
+ default:
271
+ return {
272
+ content: [
273
+ {
274
+ type: 'text',
275
+ text: JSON.stringify({
276
+ error: {
277
+ code: 'INVALID_ARGUMENT',
278
+ message: `未知提取类型: ${args.type}`,
279
+ },
280
+ }),
281
+ },
282
+ ],
283
+ isError: true,
284
+ };
285
+ }
286
+ }); // withFrame
287
+ }); // withTabId
262
288
  }
263
289
  catch (error) {
264
290
  return formatErrorResponse(error);
@@ -267,24 +293,22 @@ export async function handleExtract(params) {
267
293
  /**
268
294
  * 提取文本内容
269
295
  */
270
- async function extractText(session, target) {
296
+ async function extractText(session, target, timeout) {
271
297
  if (target) {
272
- // 定位元素并提取文本
273
- const locator = session.createLocator(target);
298
+ const locator = session.createLocator(target, timeout !== undefined ? { timeout } : undefined);
274
299
  const text = await locator.evaluateOn(`function() {
275
300
  return this.textContent ?? '';
276
301
  }`);
277
302
  return text ?? '';
278
303
  }
279
- // 提取整个页面文本
280
304
  return session.evaluate('document.body.innerText');
281
305
  }
282
306
  /**
283
307
  * 提取 HTML
284
308
  */
285
- async function extractHTML(session, target) {
309
+ async function extractHTML(session, target, timeout) {
286
310
  if (target) {
287
- const locator = session.createLocator(target);
311
+ const locator = session.createLocator(target, timeout !== undefined ? { timeout } : undefined);
288
312
  const html = await locator.evaluateOn(`function() {
289
313
  return this.outerHTML;
290
314
  }`);
@@ -295,10 +319,107 @@ async function extractHTML(session, target) {
295
319
  /**
296
320
  * 提取属性
297
321
  */
298
- async function extractAttribute(session, target, attribute) {
299
- const locator = session.createLocator(target);
322
+ async function extractAttribute(session, target, attribute, timeout) {
323
+ const locator = session.createLocator(target, timeout !== undefined ? { timeout } : undefined);
324
+ // 使用 JSON.stringify 安全转义属性名,防止 JS 注入
300
325
  return locator.evaluateOn(`function() {
301
- return this.getAttribute('${attribute}');
326
+ return this.getAttribute(${JSON.stringify(attribute)});
302
327
  }`);
303
328
  }
329
+ /**
330
+ * Extension 模式:提取文本
331
+ * 支持所有 Target 形式(css/xpath/text/role/label 等)
332
+ */
333
+ async function extractTextExtension(unifiedSession, target) {
334
+ if (!target)
335
+ return unifiedSession.getText();
336
+ const { selector, text, xpath } = targetToFindParams(target);
337
+ if (selector)
338
+ return unifiedSession.getText(selector);
339
+ // xpath/text 定位:通过 evaluate 在页面上下文中查找
340
+ if (xpath) {
341
+ return unifiedSession.evaluate(`(function(xp) { var r = document.evaluate(xp, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return r.singleNodeValue ? r.singleNodeValue.textContent || '' : '' })`, undefined, undefined, [xpath]);
342
+ }
343
+ if (text) {
344
+ return unifiedSession.evaluate(`(function(t) { var els = document.querySelectorAll('*'); for (var i = 0; i < els.length; i++) { var cn = els[i].childNodes; for (var j = 0; j < cn.length; j++) { if (cn[j].nodeType === 3 && cn[j].textContent && cn[j].textContent.includes(t)) return els[i].textContent || '' } } return '' })`, undefined, undefined, [text]);
345
+ }
346
+ return unifiedSession.getText();
347
+ }
348
+ /**
349
+ * Extension 模式:提取 HTML
350
+ * 支持所有 Target 形式(css/xpath/text/role/label 等)
351
+ */
352
+ async function extractHtmlExtension(unifiedSession, target, outer = true) {
353
+ if (!target)
354
+ return unifiedSession.getHtml(undefined, outer);
355
+ const { selector, text, xpath } = targetToFindParams(target);
356
+ if (selector)
357
+ return unifiedSession.getHtml(selector, outer);
358
+ const prop = outer ? 'outerHTML' : 'innerHTML';
359
+ if (xpath) {
360
+ return unifiedSession.evaluate(`(function(xp, p) { var r = document.evaluate(xp, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return r.singleNodeValue ? r.singleNodeValue[p] || '' : '' })`, undefined, undefined, [xpath, prop]);
361
+ }
362
+ if (text) {
363
+ return unifiedSession.evaluate(`(function(t, p) { var els = document.querySelectorAll('*'); for (var i = 0; i < els.length; i++) { var cn = els[i].childNodes; for (var j = 0; j < cn.length; j++) { if (cn[j].nodeType === 3 && cn[j].textContent && cn[j].textContent.includes(t)) return els[i][p] || '' } } return '' })`, undefined, undefined, [text, prop]);
364
+ }
365
+ return unifiedSession.getHtml(undefined, outer);
366
+ }
367
+ /**
368
+ * Extension 模式:提取属性
369
+ */
370
+ async function extractAttributeExtension(unifiedSession, target, attribute) {
371
+ const { selector, text, xpath } = targetToFindParams(target);
372
+ // xpath/text 定位需要先 find 得到 refId,再获取属性
373
+ if (xpath || text) {
374
+ const elements = await unifiedSession.find(selector, text, xpath);
375
+ if (elements.length > 0) {
376
+ return unifiedSession.getAttribute(undefined, elements[0].refId, attribute);
377
+ }
378
+ return null;
379
+ }
380
+ if (selector) {
381
+ return unifiedSession.getAttribute(selector, undefined, attribute);
382
+ }
383
+ return null;
384
+ }
385
+ /**
386
+ * Extension 模式:等待目标元素出现
387
+ *
388
+ * 在 extract 操作前轮询 find(),直到找到匹配元素或超时。
389
+ * 用于实现 extract 的 timeout 参数语义。
390
+ */
391
+ async function waitForTargetExtension(unifiedSession, target, timeout) {
392
+ const startTime = Date.now();
393
+ const retryDelay = 100;
394
+ const { selector, text, xpath } = targetToFindParams(target);
395
+ let lastError = null;
396
+ while (true) {
397
+ const elapsed = Date.now() - startTime;
398
+ if (elapsed >= timeout) {
399
+ const msg = `等待目标元素超时 (${timeout}ms)`;
400
+ throw new Error(lastError ? `${msg}: ${lastError.message}` : msg);
401
+ }
402
+ if (!unifiedSession.isExtensionConnected()) {
403
+ lastError = new Error('Extension 未连接');
404
+ await new Promise(r => setTimeout(r, retryDelay));
405
+ continue;
406
+ }
407
+ try {
408
+ const remaining = timeout - elapsed;
409
+ const elements = await unifiedSession.find(selector, text, xpath, remaining);
410
+ if (elements.length > 0)
411
+ return;
412
+ }
413
+ catch (err) {
414
+ // 暂时性错误(RPC 超时、发送失败、连接断开)可重试,其他确定性错误立即抛出
415
+ if (err instanceof Error && /Request timeout|Failed to send|disconnect|未连接|stopped|replaced/i.test(err.message)) {
416
+ lastError = err;
417
+ await new Promise(r => setTimeout(r, retryDelay));
418
+ continue;
419
+ }
420
+ throw err;
421
+ }
422
+ await new Promise(r => setTimeout(r, retryDelay));
423
+ }
424
+ }
304
425
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"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"}