@natchs/browser-mcp 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 +141 -0
- package/dist/core/auth.d.ts +7 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +23 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/cache.d.ts +24 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +67 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/config.d.ts +362 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +281 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +38 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +19 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/errors.d.ts +82 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +98 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +41 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/metrics.d.ts +24 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +59 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/network-capture.d.ts +117 -0
- package/dist/core/network-capture.d.ts.map +1 -0
- package/dist/core/network-capture.js +349 -0
- package/dist/core/network-capture.js.map +1 -0
- package/dist/core/network-export.d.ts +6 -0
- package/dist/core/network-export.d.ts.map +1 -0
- package/dist/core/network-export.js +163 -0
- package/dist/core/network-export.js.map +1 -0
- package/dist/core/output.d.ts +66 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +114 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/pipeline.d.ts +25 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +52 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/plugin.d.ts +26 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +49 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/rate-limit.d.ts +33 -0
- package/dist/core/rate-limit.d.ts.map +1 -0
- package/dist/core/rate-limit.js +89 -0
- package/dist/core/rate-limit.js.map +1 -0
- package/dist/core/registry.d.ts +67 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +270 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/sandbox.d.ts +20 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js +168 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/schema-gen.d.ts +5 -0
- package/dist/core/schema-gen.d.ts.map +1 -0
- package/dist/core/schema-gen.js +115 -0
- package/dist/core/schema-gen.js.map +1 -0
- package/dist/core/session.d.ts +88 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +300 -0
- package/dist/core/session.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +192 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +11 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +121 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/tools/admin/cache.d.ts +7 -0
- package/dist/tools/admin/cache.d.ts.map +1 -0
- package/dist/tools/admin/cache.js +27 -0
- package/dist/tools/admin/cache.js.map +1 -0
- package/dist/tools/admin/index.d.ts +3 -0
- package/dist/tools/admin/index.d.ts.map +1 -0
- package/dist/tools/admin/index.js +9 -0
- package/dist/tools/admin/index.js.map +1 -0
- package/dist/tools/admin/server-status.d.ts +14 -0
- package/dist/tools/admin/server-status.d.ts.map +1 -0
- package/dist/tools/admin/server-status.js +33 -0
- package/dist/tools/admin/server-status.js.map +1 -0
- package/dist/tools/browser/cookies.d.ts +46 -0
- package/dist/tools/browser/cookies.d.ts.map +1 -0
- package/dist/tools/browser/cookies.js +65 -0
- package/dist/tools/browser/cookies.js.map +1 -0
- package/dist/tools/browser/evaluate.d.ts +12 -0
- package/dist/tools/browser/evaluate.d.ts.map +1 -0
- package/dist/tools/browser/evaluate.js +61 -0
- package/dist/tools/browser/evaluate.js.map +1 -0
- package/dist/tools/browser/index.d.ts +3 -0
- package/dist/tools/browser/index.d.ts.map +1 -0
- package/dist/tools/browser/index.js +17 -0
- package/dist/tools/browser/index.js.map +1 -0
- package/dist/tools/browser/page-info.d.ts +6 -0
- package/dist/tools/browser/page-info.d.ts.map +1 -0
- package/dist/tools/browser/page-info.js +25 -0
- package/dist/tools/browser/page-info.js.map +1 -0
- package/dist/tools/browser/pdf.d.ts +45 -0
- package/dist/tools/browser/pdf.d.ts.map +1 -0
- package/dist/tools/browser/pdf.js +57 -0
- package/dist/tools/browser/pdf.js.map +1 -0
- package/dist/tools/browser/screenshot.d.ts +21 -0
- package/dist/tools/browser/screenshot.d.ts.map +1 -0
- package/dist/tools/browser/screenshot.js +41 -0
- package/dist/tools/browser/screenshot.js.map +1 -0
- package/dist/tools/extraction/extract-css.d.ts +33 -0
- package/dist/tools/extraction/extract-css.d.ts.map +1 -0
- package/dist/tools/extraction/extract-css.js +112 -0
- package/dist/tools/extraction/extract-css.js.map +1 -0
- package/dist/tools/extraction/extract.d.ts +10 -0
- package/dist/tools/extraction/extract.d.ts.map +1 -0
- package/dist/tools/extraction/extract.js +71 -0
- package/dist/tools/extraction/extract.js.map +1 -0
- package/dist/tools/extraction/index.d.ts +3 -0
- package/dist/tools/extraction/index.d.ts.map +1 -0
- package/dist/tools/extraction/index.js +17 -0
- package/dist/tools/extraction/index.js.map +1 -0
- package/dist/tools/interaction/click.d.ts +15 -0
- package/dist/tools/interaction/click.d.ts.map +1 -0
- package/dist/tools/interaction/click.js +31 -0
- package/dist/tools/interaction/click.js.map +1 -0
- package/dist/tools/interaction/drag.d.ts +18 -0
- package/dist/tools/interaction/drag.d.ts.map +1 -0
- package/dist/tools/interaction/drag.js +27 -0
- package/dist/tools/interaction/drag.js.map +1 -0
- package/dist/tools/interaction/file-upload.d.ts +18 -0
- package/dist/tools/interaction/file-upload.d.ts.map +1 -0
- package/dist/tools/interaction/file-upload.js +37 -0
- package/dist/tools/interaction/file-upload.js.map +1 -0
- package/dist/tools/interaction/fill.d.ts +18 -0
- package/dist/tools/interaction/fill.d.ts.map +1 -0
- package/dist/tools/interaction/fill.js +34 -0
- package/dist/tools/interaction/fill.js.map +1 -0
- package/dist/tools/interaction/hover.d.ts +15 -0
- package/dist/tools/interaction/hover.d.ts.map +1 -0
- package/dist/tools/interaction/hover.js +26 -0
- package/dist/tools/interaction/hover.js.map +1 -0
- package/dist/tools/interaction/index.d.ts +3 -0
- package/dist/tools/interaction/index.d.ts.map +1 -0
- package/dist/tools/interaction/index.js +19 -0
- package/dist/tools/interaction/index.js.map +1 -0
- package/dist/tools/interaction/press-key.d.ts +12 -0
- package/dist/tools/interaction/press-key.d.ts.map +1 -0
- package/dist/tools/interaction/press-key.js +24 -0
- package/dist/tools/interaction/press-key.js.map +1 -0
- package/dist/tools/interaction/select.d.ts +18 -0
- package/dist/tools/interaction/select.d.ts.map +1 -0
- package/dist/tools/interaction/select.js +28 -0
- package/dist/tools/interaction/select.js.map +1 -0
- package/dist/tools/interaction/type.d.ts +21 -0
- package/dist/tools/interaction/type.d.ts.map +1 -0
- package/dist/tools/interaction/type.js +30 -0
- package/dist/tools/interaction/type.js.map +1 -0
- package/dist/tools/navigation/back.d.ts +6 -0
- package/dist/tools/navigation/back.d.ts.map +1 -0
- package/dist/tools/navigation/back.js +16 -0
- package/dist/tools/navigation/back.js.map +1 -0
- package/dist/tools/navigation/forward.d.ts +6 -0
- package/dist/tools/navigation/forward.d.ts.map +1 -0
- package/dist/tools/navigation/forward.js +16 -0
- package/dist/tools/navigation/forward.js.map +1 -0
- package/dist/tools/navigation/index.d.ts +3 -0
- package/dist/tools/navigation/index.d.ts.map +1 -0
- package/dist/tools/navigation/index.js +13 -0
- package/dist/tools/navigation/index.js.map +1 -0
- package/dist/tools/navigation/navigate.d.ts +19 -0
- package/dist/tools/navigation/navigate.d.ts.map +1 -0
- package/dist/tools/navigation/navigate.js +52 -0
- package/dist/tools/navigation/navigate.js.map +1 -0
- package/dist/tools/navigation/refresh.d.ts +15 -0
- package/dist/tools/navigation/refresh.d.ts.map +1 -0
- package/dist/tools/navigation/refresh.js +26 -0
- package/dist/tools/navigation/refresh.js.map +1 -0
- package/dist/tools/navigation/wait-for.d.ts +12 -0
- package/dist/tools/navigation/wait-for.d.ts.map +1 -0
- package/dist/tools/navigation/wait-for.js +23 -0
- package/dist/tools/navigation/wait-for.js.map +1 -0
- package/dist/tools/network/console.d.ts +17 -0
- package/dist/tools/network/console.d.ts.map +1 -0
- package/dist/tools/network/console.js +29 -0
- package/dist/tools/network/console.js.map +1 -0
- package/dist/tools/network/dialog.d.ts +14 -0
- package/dist/tools/network/dialog.d.ts.map +1 -0
- package/dist/tools/network/dialog.js +34 -0
- package/dist/tools/network/dialog.js.map +1 -0
- package/dist/tools/network/index.d.ts +3 -0
- package/dist/tools/network/index.d.ts.map +1 -0
- package/dist/tools/network/index.js +21 -0
- package/dist/tools/network/index.js.map +1 -0
- package/dist/tools/network/network-clear.d.ts +11 -0
- package/dist/tools/network/network-clear.d.ts.map +1 -0
- package/dist/tools/network/network-clear.js +24 -0
- package/dist/tools/network/network-clear.js.map +1 -0
- package/dist/tools/network/network-entries.d.ts +35 -0
- package/dist/tools/network/network-entries.d.ts.map +1 -0
- package/dist/tools/network/network-entries.js +73 -0
- package/dist/tools/network/network-entries.js.map +1 -0
- package/dist/tools/network/network-export.d.ts +14 -0
- package/dist/tools/network/network-export.d.ts.map +1 -0
- package/dist/tools/network/network-export.js +24 -0
- package/dist/tools/network/network-export.js.map +1 -0
- package/dist/tools/network/network-requests.d.ts +20 -0
- package/dist/tools/network/network-requests.d.ts.map +1 -0
- package/dist/tools/network/network-requests.js +36 -0
- package/dist/tools/network/network-requests.js.map +1 -0
- package/dist/tools/network/network-response.d.ts +14 -0
- package/dist/tools/network/network-response.d.ts.map +1 -0
- package/dist/tools/network/network-response.js +56 -0
- package/dist/tools/network/network-response.js.map +1 -0
- package/dist/tools/network/wait-nav.d.ts +15 -0
- package/dist/tools/network/wait-nav.d.ts.map +1 -0
- package/dist/tools/network/wait-nav.js +26 -0
- package/dist/tools/network/wait-nav.js.map +1 -0
- package/dist/tools/network/websocket-frames.d.ts +17 -0
- package/dist/tools/network/websocket-frames.d.ts.map +1 -0
- package/dist/tools/network/websocket-frames.js +24 -0
- package/dist/tools/network/websocket-frames.js.map +1 -0
- package/dist/tools/re/api-discover.d.ts +11 -0
- package/dist/tools/re/api-discover.d.ts.map +1 -0
- package/dist/tools/re/api-discover.js +57 -0
- package/dist/tools/re/api-discover.js.map +1 -0
- package/dist/tools/re/auth-analyze.d.ts +11 -0
- package/dist/tools/re/auth-analyze.d.ts.map +1 -0
- package/dist/tools/re/auth-analyze.js +86 -0
- package/dist/tools/re/auth-analyze.js.map +1 -0
- package/dist/tools/re/index.d.ts +3 -0
- package/dist/tools/re/index.d.ts.map +1 -0
- package/dist/tools/re/index.js +11 -0
- package/dist/tools/re/index.js.map +1 -0
- package/dist/tools/re/js-beautify.d.ts +14 -0
- package/dist/tools/re/js-beautify.d.ts.map +1 -0
- package/dist/tools/re/js-beautify.js +132 -0
- package/dist/tools/re/js-beautify.js.map +1 -0
- package/dist/tools/re/js-deobfuscate.d.ts +11 -0
- package/dist/tools/re/js-deobfuscate.d.ts.map +1 -0
- package/dist/tools/re/js-deobfuscate.js +96 -0
- package/dist/tools/re/js-deobfuscate.js.map +1 -0
- package/dist/tools/session/close.d.ts +11 -0
- package/dist/tools/session/close.d.ts.map +1 -0
- package/dist/tools/session/close.js +24 -0
- package/dist/tools/session/close.js.map +1 -0
- package/dist/tools/session/index.d.ts +3 -0
- package/dist/tools/session/index.d.ts.map +1 -0
- package/dist/tools/session/index.js +9 -0
- package/dist/tools/session/index.js.map +1 -0
- package/dist/tools/session/list.d.ts +14 -0
- package/dist/tools/session/list.d.ts.map +1 -0
- package/dist/tools/session/list.js +26 -0
- package/dist/tools/session/list.js.map +1 -0
- package/dist/tools/session/open.d.ts +11 -0
- package/dist/tools/session/open.d.ts.map +1 -0
- package/dist/tools/session/open.js +25 -0
- package/dist/tools/session/open.js.map +1 -0
- package/dist/tools/stealth/fingerprint.d.ts +11 -0
- package/dist/tools/stealth/fingerprint.d.ts.map +1 -0
- package/dist/tools/stealth/fingerprint.js +72 -0
- package/dist/tools/stealth/fingerprint.js.map +1 -0
- package/dist/tools/stealth/human-behavior.d.ts +29 -0
- package/dist/tools/stealth/human-behavior.d.ts.map +1 -0
- package/dist/tools/stealth/human-behavior.js +86 -0
- package/dist/tools/stealth/human-behavior.js.map +1 -0
- package/dist/tools/stealth/index.d.ts +3 -0
- package/dist/tools/stealth/index.d.ts.map +1 -0
- package/dist/tools/stealth/index.js +7 -0
- package/dist/tools/stealth/index.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const NavigateArgs: z.ZodObject<{
|
|
5
|
+
url: z.ZodString;
|
|
6
|
+
waitUntil: z.ZodDefault<z.ZodEnum<["load", "domcontentloaded", "networkidle", "commit"]>>;
|
|
7
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
timeout: number;
|
|
10
|
+
url: string;
|
|
11
|
+
waitUntil: "domcontentloaded" | "load" | "networkidle" | "commit";
|
|
12
|
+
}, {
|
|
13
|
+
url: string;
|
|
14
|
+
timeout?: number | undefined;
|
|
15
|
+
waitUntil?: "domcontentloaded" | "load" | "networkidle" | "commit" | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export type NavigateArgs = z.infer<typeof NavigateArgs>;
|
|
18
|
+
export declare const navigateHandler: ToolHandler<Page>;
|
|
19
|
+
//# sourceMappingURL=navigate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,eAAO,MAAM,YAAY;;;;;;;;;;;;EAMvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI,CA4C7C,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { okResult, errorResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { validateUrl } from '../../core/sandbox.js';
|
|
5
|
+
export const NavigateArgs = z.object({
|
|
6
|
+
url: z.string().url(),
|
|
7
|
+
waitUntil: z
|
|
8
|
+
.enum(['load', 'domcontentloaded', 'networkidle', 'commit'])
|
|
9
|
+
.default('load'),
|
|
10
|
+
timeout: z.number().int().min(1000).max(120000).default(30000),
|
|
11
|
+
});
|
|
12
|
+
export const navigateHandler = async (args, ctx) => {
|
|
13
|
+
const parsed = NavigateArgs.safeParse(args);
|
|
14
|
+
if (!parsed.success) {
|
|
15
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
16
|
+
}
|
|
17
|
+
const { url, waitUntil, timeout } = parsed.data;
|
|
18
|
+
const urlCheck = validateUrl(url);
|
|
19
|
+
if (!urlCheck.valid) {
|
|
20
|
+
return errorResult(ErrorCode.URL_BLOCKED, urlCheck.error);
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const page = await ctx.getPage();
|
|
24
|
+
await page.route('**/*', (route) => {
|
|
25
|
+
const requestUrl = route.request().url();
|
|
26
|
+
const check = validateUrl(requestUrl);
|
|
27
|
+
if (!check.valid) {
|
|
28
|
+
route.abort('blockedbyclient');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
route.continue();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
await page.goto(url, { waitUntil, timeout });
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
await page.unroute('**/*');
|
|
39
|
+
}
|
|
40
|
+
const finalUrl = page.url();
|
|
41
|
+
const finalCheck = validateUrl(finalUrl);
|
|
42
|
+
if (!finalCheck.valid) {
|
|
43
|
+
return errorResult(ErrorCode.URL_BLOCKED, `Navigation ended at blocked URL: ${finalUrl}`);
|
|
44
|
+
}
|
|
45
|
+
return okResult({ finalUrl });
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
49
|
+
return errorResult(ErrorCode.NAVIGATION_FAILED, message);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=navigate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../../src/tools/navigation/navigate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const RefreshArgs: z.ZodObject<{
|
|
5
|
+
waitUntil: z.ZodDefault<z.ZodEnum<["load", "domcontentloaded", "networkidle", "commit"]>>;
|
|
6
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
timeout: number;
|
|
9
|
+
waitUntil: "domcontentloaded" | "load" | "networkidle" | "commit";
|
|
10
|
+
}, {
|
|
11
|
+
timeout?: number | undefined;
|
|
12
|
+
waitUntil?: "domcontentloaded" | "load" | "networkidle" | "commit" | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const refreshHandler: ToolHandler<Page>;
|
|
15
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,WAAW;;;;;;;;;EAKtB,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,IAAI,CAc5C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const RefreshArgs = z.object({
|
|
5
|
+
waitUntil: z
|
|
6
|
+
.enum(['load', 'domcontentloaded', 'networkidle', 'commit'])
|
|
7
|
+
.default('load'),
|
|
8
|
+
timeout: z.number().int().min(1000).max(120000).default(30000),
|
|
9
|
+
});
|
|
10
|
+
export const refreshHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = RefreshArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success) {
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
}
|
|
15
|
+
const { waitUntil, timeout } = parsed.data;
|
|
16
|
+
try {
|
|
17
|
+
const page = await ctx.getPage();
|
|
18
|
+
await page.reload({ waitUntil, timeout });
|
|
19
|
+
return okResult({ finalUrl: page.url() });
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
23
|
+
return errorResult(ErrorCode.REFRESH_FAILED, message);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/tools/navigation/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;SAC3D,OAAO,CAAC,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
import type { Page } from 'playwright';
|
|
4
|
+
export declare const WaitForArgs: z.ZodObject<{
|
|
5
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
timeout: number;
|
|
8
|
+
}, {
|
|
9
|
+
timeout?: number | undefined;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const waitForHandler: ToolHandler<Page>;
|
|
12
|
+
//# sourceMappingURL=wait-for.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,WAAW;;;;;;EAEtB,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,IAAI,CAc5C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const WaitForArgs = z.object({
|
|
5
|
+
timeout: z.number().int().min(100).max(120000).default(5000),
|
|
6
|
+
});
|
|
7
|
+
export const waitForHandler = async (args, ctx) => {
|
|
8
|
+
const parsed = WaitForArgs.safeParse(args);
|
|
9
|
+
if (!parsed.success) {
|
|
10
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
11
|
+
}
|
|
12
|
+
const { timeout } = parsed.data;
|
|
13
|
+
try {
|
|
14
|
+
const page = await ctx.getPage();
|
|
15
|
+
await page.waitForTimeout(timeout);
|
|
16
|
+
return okResult({ waited: timeout });
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
20
|
+
return errorResult(ErrorCode.WAIT_FAILED, message);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=wait-for.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for.js","sourceRoot":"","sources":["../../../src/tools/navigation/wait-for.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const GetConsoleArgs: z.ZodObject<{
|
|
4
|
+
level: z.ZodDefault<z.ZodEnum<["error", "warning", "info", "debug"]>>;
|
|
5
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
level: "debug" | "info" | "error" | "warning";
|
|
9
|
+
offset?: number | undefined;
|
|
10
|
+
limit?: number | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
level?: "debug" | "info" | "error" | "warning" | undefined;
|
|
13
|
+
offset?: number | undefined;
|
|
14
|
+
limit?: number | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const getConsoleHandler: ToolHandler;
|
|
17
|
+
//# sourceMappingURL=console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/tools/network/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAIH,eAAO,MAAM,iBAAiB,EAAE,WAgB/B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, applyPagination, paginatedOkResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const GetConsoleArgs = z.object({
|
|
5
|
+
level: z.enum(['error', 'warning', 'info', 'debug']).default('info'),
|
|
6
|
+
offset: z.number().int().min(0).optional(),
|
|
7
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
8
|
+
});
|
|
9
|
+
const LEVEL_ORDER = { error: 0, warning: 1, info: 2, debug: 3 };
|
|
10
|
+
export const getConsoleHandler = async (args, ctx) => {
|
|
11
|
+
const parsed = GetConsoleArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { level, offset, limit } = parsed.data;
|
|
15
|
+
try {
|
|
16
|
+
const session = ctx.session;
|
|
17
|
+
const result = await session.getConsoleMessages();
|
|
18
|
+
const messages = result.messages;
|
|
19
|
+
const minOrder = LEVEL_ORDER[level] ?? 2;
|
|
20
|
+
const filtered = messages.filter((m) => (LEVEL_ORDER[m.level] ?? 2) <= minOrder);
|
|
21
|
+
const { items, totalCount } = applyPagination(filtered, { offset, limit });
|
|
22
|
+
return paginatedOkResult(items, totalCount, offset ?? 0, limit ?? 50);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
26
|
+
return errorResult(ErrorCode.GET_CONSOLE_FAILED, message);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/tools/network/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,MAAM,WAAW,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAExF,MAAM,CAAC,MAAM,iBAAiB,GAAgB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC/F,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const HandleDialogArgs: z.ZodObject<{
|
|
4
|
+
accept: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
promptText: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
accept: boolean;
|
|
8
|
+
promptText?: string | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
accept?: boolean | undefined;
|
|
11
|
+
promptText?: string | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const handleDialogHandler: ToolHandler;
|
|
14
|
+
//# sourceMappingURL=dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/tools/network/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAoBjC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const HandleDialogArgs = z.object({
|
|
5
|
+
accept: z.boolean().default(true),
|
|
6
|
+
promptText: z.string().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const handleDialogHandler = async (args, ctx) => {
|
|
9
|
+
const parsed = HandleDialogArgs.safeParse(args);
|
|
10
|
+
if (!parsed.success)
|
|
11
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
12
|
+
const { accept, promptText } = parsed.data;
|
|
13
|
+
try {
|
|
14
|
+
const dialog = ctx.session?.getPendingDialog?.();
|
|
15
|
+
if (!dialog)
|
|
16
|
+
return errorResult(ErrorCode.DIALOG_FAILED, 'No dialog to handle');
|
|
17
|
+
if (promptText) {
|
|
18
|
+
await dialog.accept(promptText);
|
|
19
|
+
}
|
|
20
|
+
else if (accept) {
|
|
21
|
+
await dialog.accept();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
await dialog.dismiss();
|
|
25
|
+
}
|
|
26
|
+
ctx.session?.clearPendingDialog?.();
|
|
27
|
+
return okResult({ handled: accept ? 'accepted' : 'dismissed' });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
return errorResult(ErrorCode.DIALOG_FAILED, message);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/tools/network/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAgB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAChF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAW3D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAqCjE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { networkRequestsHandler, NetworkRequestsArgs } from './network-requests.js';
|
|
2
|
+
import { networkResponseHandler, NetworkResponseArgs } from './network-response.js';
|
|
3
|
+
import { networkEntriesHandler, NetworkEntriesArgs } from './network-entries.js';
|
|
4
|
+
import { networkExportHandler, NetworkExportArgs } from './network-export.js';
|
|
5
|
+
import { websocketFramesHandler, WebSocketFramesArgs } from './websocket-frames.js';
|
|
6
|
+
import { networkClearHandler, NetworkClearArgs } from './network-clear.js';
|
|
7
|
+
import { getConsoleHandler, GetConsoleArgs } from './console.js';
|
|
8
|
+
import { handleDialogHandler, HandleDialogArgs } from './dialog.js';
|
|
9
|
+
import { waitForNavigationHandler, WaitForNavigationArgs } from './wait-nav.js';
|
|
10
|
+
export function registerNetworkTools(registry) {
|
|
11
|
+
registry.register({ name: 'browser_network_requests', description: 'List network requests made by the page', category: 'network', requiresNetwork: true, schema: NetworkRequestsArgs }, networkRequestsHandler);
|
|
12
|
+
registry.register({ name: 'browser_network_response', description: 'Get full response details for a specific request', category: 'network', requiresNetwork: true, schema: NetworkResponseArgs }, networkResponseHandler);
|
|
13
|
+
registry.register({ name: 'browser_get_console', description: 'Get console messages from the page', category: 'network', requiresNetwork: true, schema: GetConsoleArgs }, getConsoleHandler);
|
|
14
|
+
registry.register({ name: 'browser_handle_dialog', description: 'Accept or dismiss a browser dialog', category: 'network', schema: HandleDialogArgs }, handleDialogHandler);
|
|
15
|
+
registry.register({ name: 'browser_wait_for_navigation', description: 'Wait for the page to navigate', category: 'network', schema: WaitForNavigationArgs }, waitForNavigationHandler);
|
|
16
|
+
registry.register({ name: 'browser_get_network_entries', description: 'List detailed network entries with timing, sizes, and headers', category: 'network', requiresNetwork: true, schema: NetworkEntriesArgs, readOnlyHint: true }, networkEntriesHandler);
|
|
17
|
+
registry.register({ name: 'browser_network_export', description: 'Export network log to HAR, JSON, or CSV format', category: 'network', requiresNetwork: true, schema: NetworkExportArgs, destructiveHint: true }, networkExportHandler);
|
|
18
|
+
registry.register({ name: 'browser_websocket_frames', description: 'List WebSocket frames captured during the session', category: 'network', requiresNetwork: true, schema: WebSocketFramesArgs, readOnlyHint: true }, websocketFramesHandler);
|
|
19
|
+
registry.register({ name: 'browser_network_clear', description: 'Clear captured network data', category: 'network', requiresNetwork: true, schema: NetworkClearArgs, destructiveHint: true }, networkClearHandler);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/network/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACpK,sBAAsB,CACvB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,kDAAkD,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAC9K,sBAAsB,CACvB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,EACtJ,iBAAiB,CAClB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACnI,mBAAmB,CACpB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,EACzI,wBAAwB,CACzB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,+DAA+D,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,EAAE,EACjN,qBAAqB,CACtB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,gDAAgD,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,IAAI,EAAE,EAC/L,oBAAoB,CACrB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,mDAAmD,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,EACnM,sBAAsB,CACvB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,EAC1K,mBAAmB,CACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const NetworkClearArgs: z.ZodObject<{
|
|
4
|
+
force: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
force: boolean;
|
|
7
|
+
}, {
|
|
8
|
+
force?: boolean | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const networkClearHandler: ToolHandler;
|
|
11
|
+
//# sourceMappingURL=network-clear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-clear.d.ts","sourceRoot":"","sources":["../../../src/tools/network/network-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAcjC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const NetworkClearArgs = z.object({
|
|
5
|
+
force: z.boolean().default(false),
|
|
6
|
+
});
|
|
7
|
+
export const networkClearHandler = async (args, ctx) => {
|
|
8
|
+
const parsed = NetworkClearArgs.safeParse(args);
|
|
9
|
+
if (!parsed.success)
|
|
10
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
11
|
+
const { force } = parsed.data;
|
|
12
|
+
try {
|
|
13
|
+
if (!force) {
|
|
14
|
+
await ctx.session?.flushNetworkCaptures();
|
|
15
|
+
}
|
|
16
|
+
ctx.session?.clearNetworkRequests();
|
|
17
|
+
return okResult({ cleared: true });
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
21
|
+
return errorResult(ErrorCode.NETWORK_CLEAR_FAILED, message);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=network-clear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-clear.js","sourceRoot":"","sources":["../../../src/tools/network/network-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAgB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,CAAC;QAC5C,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const NetworkEntriesArgs: z.ZodObject<{
|
|
4
|
+
filter: z.ZodOptional<z.ZodString>;
|
|
5
|
+
useRegex: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
includeStatic: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
resourceType: z.ZodOptional<z.ZodString>;
|
|
8
|
+
status: z.ZodDefault<z.ZodEnum<["pending", "completed", "failed", "all"]>>;
|
|
9
|
+
sort: z.ZodDefault<z.ZodEnum<["timestamp", "url", "status"]>>;
|
|
10
|
+
order: z.ZodDefault<z.ZodEnum<["asc", "desc"]>>;
|
|
11
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
sort: "status" | "timestamp" | "url";
|
|
15
|
+
status: "failed" | "completed" | "all" | "pending";
|
|
16
|
+
includeStatic: boolean;
|
|
17
|
+
useRegex: boolean;
|
|
18
|
+
order: "desc" | "asc";
|
|
19
|
+
filter?: string | undefined;
|
|
20
|
+
offset?: number | undefined;
|
|
21
|
+
limit?: number | undefined;
|
|
22
|
+
resourceType?: string | undefined;
|
|
23
|
+
}, {
|
|
24
|
+
sort?: "status" | "timestamp" | "url" | undefined;
|
|
25
|
+
filter?: string | undefined;
|
|
26
|
+
status?: "failed" | "completed" | "all" | "pending" | undefined;
|
|
27
|
+
includeStatic?: boolean | undefined;
|
|
28
|
+
offset?: number | undefined;
|
|
29
|
+
limit?: number | undefined;
|
|
30
|
+
useRegex?: boolean | undefined;
|
|
31
|
+
resourceType?: string | undefined;
|
|
32
|
+
order?: "desc" | "asc" | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const networkEntriesHandler: ToolHandler;
|
|
35
|
+
//# sourceMappingURL=network-entries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-entries.d.ts","sourceRoot":"","sources":["../../../src/tools/network/network-entries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU7B,CAAC;AAEH,eAAO,MAAM,qBAAqB,EAAE,WAuCnC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, applyPagination, paginatedOkResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
const REDOS_PATTERN = /\(\S*\+\)\+/;
|
|
5
|
+
function isSafeRegex(pattern) {
|
|
6
|
+
return !REDOS_PATTERN.test(pattern);
|
|
7
|
+
}
|
|
8
|
+
export const NetworkEntriesArgs = z.object({
|
|
9
|
+
filter: z.string().optional(),
|
|
10
|
+
useRegex: z.boolean().default(false),
|
|
11
|
+
includeStatic: z.boolean().default(true),
|
|
12
|
+
resourceType: z.string().optional(),
|
|
13
|
+
status: z.enum(['pending', 'completed', 'failed', 'all']).default('all'),
|
|
14
|
+
sort: z.enum(['timestamp', 'url', 'status']).default('timestamp'),
|
|
15
|
+
order: z.enum(['asc', 'desc']).default('desc'),
|
|
16
|
+
offset: z.number().int().min(0).optional(),
|
|
17
|
+
limit: z.number().int().min(1).max(200).optional(),
|
|
18
|
+
});
|
|
19
|
+
export const networkEntriesHandler = async (args, ctx) => {
|
|
20
|
+
const parsed = NetworkEntriesArgs.safeParse(args);
|
|
21
|
+
if (!parsed.success)
|
|
22
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
23
|
+
const { filter, useRegex, includeStatic, resourceType, status, sort, order, offset, limit } = parsed.data;
|
|
24
|
+
try {
|
|
25
|
+
const entries = ctx.session?.getNetworkEntries?.() ?? [];
|
|
26
|
+
const filtered = entries.filter(e => {
|
|
27
|
+
if (!includeStatic && ['image', 'media', 'font', 'stylesheet', 'texttrack'].includes(e.resourceType))
|
|
28
|
+
return false;
|
|
29
|
+
if (resourceType && e.resourceType !== resourceType)
|
|
30
|
+
return false;
|
|
31
|
+
if (status === 'pending' && (e.completed || e.failed))
|
|
32
|
+
return false;
|
|
33
|
+
if (status === 'completed' && !e.completed)
|
|
34
|
+
return false;
|
|
35
|
+
if (status === 'failed' && !e.failed)
|
|
36
|
+
return false;
|
|
37
|
+
if (filter) {
|
|
38
|
+
try {
|
|
39
|
+
if (useRegex) {
|
|
40
|
+
if (!isSafeRegex(filter) || !new RegExp(filter, 'u').test(e.url))
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (!e.url.includes(filter))
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// silently handled
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
});
|
|
55
|
+
const sorted = [...filtered].sort((a, b) => {
|
|
56
|
+
let cmp = 0;
|
|
57
|
+
if (sort === 'timestamp')
|
|
58
|
+
cmp = a.timestamp - b.timestamp;
|
|
59
|
+
else if (sort === 'url')
|
|
60
|
+
cmp = a.url.localeCompare(b.url);
|
|
61
|
+
else if (sort === 'status')
|
|
62
|
+
cmp = a.status - b.status;
|
|
63
|
+
return order === 'desc' ? -cmp : cmp;
|
|
64
|
+
});
|
|
65
|
+
const { items, totalCount } = applyPagination(sorted, { offset, limit });
|
|
66
|
+
return paginatedOkResult(items, totalCount, offset ?? 0, limit ?? 50);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
70
|
+
return errorResult(ErrorCode.NETWORK_REQUESTS_FAILED, message);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=network-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-entries.js","sourceRoot":"","sources":["../../../src/tools/network/network-entries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const NetworkExportArgs: z.ZodObject<{
|
|
4
|
+
format: z.ZodDefault<z.ZodEnum<["har", "json", "csv"]>>;
|
|
5
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
format: "har" | "json" | "csv";
|
|
8
|
+
filename?: string | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
format?: "har" | "json" | "csv" | undefined;
|
|
11
|
+
filename?: string | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const networkExportHandler: ToolHandler;
|
|
14
|
+
//# sourceMappingURL=network-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-export.d.ts","sourceRoot":"","sources":["../../../src/tools/network/network-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,WAYlC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
export const NetworkExportArgs = z.object({
|
|
5
|
+
format: z.enum(['har', 'json', 'csv']).default('har'),
|
|
6
|
+
filename: z.string().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const networkExportHandler = async (args, ctx) => {
|
|
9
|
+
const parsed = NetworkExportArgs.safeParse(args);
|
|
10
|
+
if (!parsed.success)
|
|
11
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
12
|
+
const { format, filename } = parsed.data;
|
|
13
|
+
try {
|
|
14
|
+
const outputPath = ctx.session?.exportNetworkLog(format, filename);
|
|
15
|
+
if (!outputPath)
|
|
16
|
+
return errorResult(ErrorCode.NETWORK_EXPORT_FAILED, 'Export returned no path');
|
|
17
|
+
return okResult({ path: outputPath, format });
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
21
|
+
return errorResult(ErrorCode.NETWORK_EXPORT_FAILED, message);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=network-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-export.js","sourceRoot":"","sources":["../../../src/tools/network/network-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAgB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACnE,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,SAAS,CAAC,qBAAqB,EAAE,yBAAyB,CAAC,CAAC;QAChG,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolHandler } from '../../core/registry.js';
|
|
3
|
+
export declare const NetworkRequestsArgs: z.ZodObject<{
|
|
4
|
+
filter: z.ZodOptional<z.ZodString>;
|
|
5
|
+
includeStatic: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
includeStatic: boolean;
|
|
10
|
+
filter?: string | undefined;
|
|
11
|
+
offset?: number | undefined;
|
|
12
|
+
limit?: number | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
filter?: string | undefined;
|
|
15
|
+
includeStatic?: boolean | undefined;
|
|
16
|
+
offset?: number | undefined;
|
|
17
|
+
limit?: number | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const networkRequestsHandler: ToolHandler;
|
|
20
|
+
//# sourceMappingURL=network-requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-requests.d.ts","sourceRoot":"","sources":["../../../src/tools/network/network-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,eAAO,MAAM,sBAAsB,EAAE,WAiBpC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, applyPagination, paginatedOkResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
const REDOS_PATTERN = /\(\S*\+\)\+/;
|
|
5
|
+
function isSafeRegex(pattern) {
|
|
6
|
+
return !REDOS_PATTERN.test(pattern);
|
|
7
|
+
}
|
|
8
|
+
export const NetworkRequestsArgs = z.object({
|
|
9
|
+
filter: z.string().optional(),
|
|
10
|
+
includeStatic: z.boolean().default(false),
|
|
11
|
+
offset: z.number().int().min(0).optional(),
|
|
12
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
13
|
+
});
|
|
14
|
+
export const networkRequestsHandler = async (args, ctx) => {
|
|
15
|
+
const parsed = NetworkRequestsArgs.safeParse(args);
|
|
16
|
+
if (!parsed.success)
|
|
17
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
18
|
+
const { filter, includeStatic, offset, limit } = parsed.data;
|
|
19
|
+
try {
|
|
20
|
+
const requests = ctx.session?.getNetworkRequests?.() ?? [];
|
|
21
|
+
const filtered = requests.filter((r) => {
|
|
22
|
+
if (!includeStatic && r.static)
|
|
23
|
+
return false;
|
|
24
|
+
if (filter && (!isSafeRegex(filter) || !new RegExp(filter, 'u').test(r.url)))
|
|
25
|
+
return false;
|
|
26
|
+
return true;
|
|
27
|
+
});
|
|
28
|
+
const { items, totalCount } = applyPagination(filtered, { offset, limit });
|
|
29
|
+
return paginatedOkResult(items, totalCount, offset ?? 0, limit ?? 50);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
+
return errorResult(ErrorCode.NETWORK_REQUESTS_FAILED, message);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=network-requests.js.map
|