@natchs/browser-mcp 2.3.1 → 2.5.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 +367 -190
- package/dist/core/audit-logger.d.ts +3 -0
- package/dist/core/audit-logger.d.ts.map +1 -0
- package/dist/core/audit-logger.js +5 -0
- package/dist/core/audit-logger.js.map +1 -0
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +29 -1
- package/dist/core/auth.js.map +1 -1
- package/dist/core/body-fetch.d.ts.map +1 -1
- package/dist/core/body-fetch.js +26 -2
- package/dist/core/body-fetch.js.map +1 -1
- package/dist/core/browser-lifecycle.d.ts +29 -0
- package/dist/core/browser-lifecycle.d.ts.map +1 -0
- package/dist/core/browser-lifecycle.js +107 -0
- package/dist/core/browser-lifecycle.js.map +1 -0
- package/dist/core/browser-provider.d.ts +7 -3
- package/dist/core/browser-provider.d.ts.map +1 -1
- package/dist/core/browser-provider.js +65 -10
- package/dist/core/browser-provider.js.map +1 -1
- package/dist/core/config.d.ts +30 -6
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +9 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.d.ts +0 -12
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +4 -13
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/network-capture-utils.d.ts +49 -0
- package/dist/core/network-capture-utils.d.ts.map +1 -0
- package/dist/core/network-capture-utils.js +56 -0
- package/dist/core/network-capture-utils.js.map +1 -0
- package/dist/core/network-capture.d.ts +3 -39
- package/dist/core/network-capture.d.ts.map +1 -1
- package/dist/core/network-capture.js +20 -53
- package/dist/core/network-capture.js.map +1 -1
- package/dist/core/network-export.d.ts +3 -3
- package/dist/core/network-export.d.ts.map +1 -1
- package/dist/core/network-export.js +20 -21
- package/dist/core/network-export.js.map +1 -1
- package/dist/core/output.d.ts +0 -28
- package/dist/core/output.d.ts.map +1 -1
- package/dist/core/registry.d.ts +2 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +14 -3
- package/dist/core/registry.js.map +1 -1
- package/dist/core/sandbox.d.ts +4 -5
- package/dist/core/sandbox.d.ts.map +1 -1
- package/dist/core/sandbox.js +31 -23
- package/dist/core/sandbox.js.map +1 -1
- package/dist/core/session.d.ts +4 -3
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +43 -22
- package/dist/core/session.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +2 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/tools/admin/cache.js +3 -3
- package/dist/tools/admin/cache.js.map +1 -1
- package/dist/tools/admin/server-status.js +2 -2
- package/dist/tools/admin/server-status.js.map +1 -1
- package/dist/tools/browser/cookies.js +4 -4
- package/dist/tools/browser/cookies.js.map +1 -1
- package/dist/tools/browser/download.js +2 -2
- package/dist/tools/browser/download.js.map +1 -1
- package/dist/tools/browser/evaluate.d.ts.map +1 -1
- package/dist/tools/browser/evaluate.js +23 -6
- package/dist/tools/browser/evaluate.js.map +1 -1
- package/dist/tools/browser/index.d.ts.map +1 -1
- package/dist/tools/browser/index.js +2 -0
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/browser/page-info.js +2 -2
- package/dist/tools/browser/page-info.js.map +1 -1
- package/dist/tools/browser/pdf.js +4 -4
- package/dist/tools/browser/pdf.js.map +1 -1
- package/dist/tools/browser/screenshot.js +3 -3
- package/dist/tools/browser/screenshot.js.map +1 -1
- package/dist/tools/browser/scroll.d.ts +17 -0
- package/dist/tools/browser/scroll.d.ts.map +1 -0
- package/dist/tools/browser/scroll.js +30 -0
- package/dist/tools/browser/scroll.js.map +1 -0
- package/dist/tools/extraction/extract-css.js +7 -7
- package/dist/tools/extraction/extract-css.js.map +1 -1
- package/dist/tools/extraction/extract.js +4 -4
- package/dist/tools/extraction/extract.js.map +1 -1
- package/dist/tools/interaction/click.d.ts +1 -2
- package/dist/tools/interaction/click.d.ts.map +1 -1
- package/dist/tools/interaction/click.js +9 -15
- package/dist/tools/interaction/click.js.map +1 -1
- package/dist/tools/interaction/drag.js +4 -4
- package/dist/tools/interaction/drag.js.map +1 -1
- package/dist/tools/interaction/file-upload.d.ts.map +1 -1
- package/dist/tools/interaction/file-upload.js +11 -5
- package/dist/tools/interaction/file-upload.js.map +1 -1
- package/dist/tools/interaction/fill.d.ts.map +1 -1
- package/dist/tools/interaction/fill.js +5 -7
- package/dist/tools/interaction/fill.js.map +1 -1
- package/dist/tools/interaction/hover.js +3 -3
- package/dist/tools/interaction/hover.js.map +1 -1
- package/dist/tools/interaction/press-key.js +3 -3
- package/dist/tools/interaction/press-key.js.map +1 -1
- package/dist/tools/interaction/select.js +4 -4
- package/dist/tools/interaction/select.js.map +1 -1
- package/dist/tools/interaction/type.d.ts +1 -1
- package/dist/tools/interaction/type.js +4 -4
- package/dist/tools/interaction/type.js.map +1 -1
- package/dist/tools/navigation/back.js +2 -2
- package/dist/tools/navigation/back.js.map +1 -1
- package/dist/tools/navigation/forward.js +2 -2
- package/dist/tools/navigation/forward.js.map +1 -1
- package/dist/tools/navigation/navigate.js +2 -2
- package/dist/tools/navigation/navigate.js.map +1 -1
- package/dist/tools/navigation/refresh.js +2 -2
- package/dist/tools/navigation/refresh.js.map +1 -1
- package/dist/tools/navigation/wait-for.js +2 -2
- package/dist/tools/navigation/wait-for.js.map +1 -1
- package/dist/tools/network/console.js +2 -2
- package/dist/tools/network/console.js.map +1 -1
- package/dist/tools/network/dialog.js +2 -2
- package/dist/tools/network/dialog.js.map +1 -1
- package/dist/tools/network/network-clear.js +2 -2
- package/dist/tools/network/network-clear.js.map +1 -1
- package/dist/tools/network/network-entries.d.ts +3 -0
- package/dist/tools/network/network-entries.d.ts.map +1 -1
- package/dist/tools/network/network-entries.js +11 -3
- package/dist/tools/network/network-entries.js.map +1 -1
- package/dist/tools/network/network-export.d.ts +2 -2
- package/dist/tools/network/network-export.js +2 -2
- package/dist/tools/network/network-export.js.map +1 -1
- package/dist/tools/network/network-requests.js +2 -2
- package/dist/tools/network/network-requests.js.map +1 -1
- package/dist/tools/network/network-response.d.ts +3 -0
- package/dist/tools/network/network-response.d.ts.map +1 -1
- package/dist/tools/network/network-response.js +9 -4
- package/dist/tools/network/network-response.js.map +1 -1
- package/dist/tools/network/network-save.js +2 -2
- package/dist/tools/network/network-save.js.map +1 -1
- package/dist/tools/network/wait-nav.js +2 -2
- package/dist/tools/network/wait-nav.js.map +1 -1
- package/dist/tools/network/websocket-frames.js +2 -2
- package/dist/tools/network/websocket-frames.js.map +1 -1
- package/dist/tools/re/api-discover.d.ts +3 -3
- package/dist/tools/re/api-discover.d.ts.map +1 -1
- package/dist/tools/re/api-discover.js +32 -11
- package/dist/tools/re/api-discover.js.map +1 -1
- package/dist/tools/re/auth-analyze.d.ts +3 -3
- package/dist/tools/re/auth-analyze.d.ts.map +1 -1
- package/dist/tools/re/auth-analyze.js +43 -6
- package/dist/tools/re/auth-analyze.js.map +1 -1
- package/dist/tools/re/js-beautify.js +3 -3
- package/dist/tools/re/js-beautify.js.map +1 -1
- package/dist/tools/re/js-deobfuscate.js +3 -3
- package/dist/tools/re/js-deobfuscate.js.map +1 -1
- package/dist/tools/session/close.js +2 -2
- package/dist/tools/session/close.js.map +1 -1
- package/dist/tools/session/list.js +2 -2
- package/dist/tools/session/list.js.map +1 -1
- package/dist/tools/session/open.js +2 -2
- package/dist/tools/session/open.js.map +1 -1
- package/dist/tools/stealth/fingerprint.d.ts +13 -0
- package/dist/tools/stealth/fingerprint.d.ts.map +1 -1
- package/dist/tools/stealth/fingerprint.js +16 -3
- package/dist/tools/stealth/fingerprint.js.map +1 -1
- package/dist/tools/stealth/human-behavior.js +2 -2
- package/dist/tools/stealth/human-behavior.js.map +1 -1
- package/package.json +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-info.js","sourceRoot":"","sources":["../../../src/tools/browser/page-info.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;
|
|
1
|
+
{"version":3,"file":"page-info.js","sourceRoot":"","sources":["../../../src/tools/browser/page-info.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIjE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAsB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YACtC,GAAG,EAAE,QAAQ,CAAC,IAAI;YAClB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAClE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE;YACnD,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,OAAO,EAAE,QAAQ,CAAC,MAAM;SACzB,CAAC,CAAC,CAAC;QACJ,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const PdfArgs = z.object({
|
|
6
6
|
format: z.enum(['A4', 'Letter', 'Legal', 'Tabloid']).default('A4'),
|
|
@@ -37,9 +37,9 @@ export const pdfHandler = async (args, ctx) => {
|
|
|
37
37
|
preferCSSPageSize: parsed.data.preferCSSPageSize,
|
|
38
38
|
};
|
|
39
39
|
if (parsed.data.headerTemplate)
|
|
40
|
-
pdfOpts.headerTemplate = sanitizeInput(parsed.data.headerTemplate)
|
|
40
|
+
pdfOpts.headerTemplate = sanitizeInput(parsed.data.headerTemplate);
|
|
41
41
|
if (parsed.data.footerTemplate)
|
|
42
|
-
pdfOpts.footerTemplate = sanitizeInput(parsed.data.footerTemplate)
|
|
42
|
+
pdfOpts.footerTemplate = sanitizeInput(parsed.data.footerTemplate);
|
|
43
43
|
const buffer = await page.pdf(pdfOpts);
|
|
44
44
|
return okResult({
|
|
45
45
|
mimeType: 'application/pdf',
|
|
@@ -50,7 +50,7 @@ export const pdfHandler = async (args, ctx) => {
|
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
catch (err) {
|
|
53
|
-
const message =
|
|
53
|
+
const message = normalizeError(err);
|
|
54
54
|
return errorResult(ErrorCode.PDF_FAILED, message);
|
|
55
55
|
}
|
|
56
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/tools/browser/pdf.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;
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/tools/browser/pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const ScreenshotArgs = z.object({
|
|
6
6
|
selector: z.string().optional(),
|
|
@@ -17,7 +17,7 @@ export const screenshotHandler = async (args, ctx) => {
|
|
|
17
17
|
const page = await ctx.getPage();
|
|
18
18
|
let buffer;
|
|
19
19
|
if (selector) {
|
|
20
|
-
const
|
|
20
|
+
const sel = sanitizeInput(selector);
|
|
21
21
|
const el = await page.waitForSelector(sel, { timeout: 10000, state: 'visible' });
|
|
22
22
|
buffer = await el.screenshot({ type, quality });
|
|
23
23
|
}
|
|
@@ -34,7 +34,7 @@ export const screenshotHandler = async (args, ctx) => {
|
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
catch (err) {
|
|
37
|
-
const message =
|
|
37
|
+
const message = normalizeError(err);
|
|
38
38
|
return errorResult(ErrorCode.SCREENSHOT_FAILED, message);
|
|
39
39
|
}
|
|
40
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/browser/screenshot.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;
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/browser/screenshot.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACtE,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,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,IAAI,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvD,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,QAAQ,CAAC;YACd,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;YACrD,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { Page } from 'playwright';
|
|
3
|
+
export declare const ScrollArgs: z.ZodObject<{
|
|
4
|
+
selector: z.ZodOptional<z.ZodString>;
|
|
5
|
+
direction: z.ZodDefault<z.ZodEnum<["up", "down", "left", "right"]>>;
|
|
6
|
+
amount: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
direction: "up" | "down" | "left" | "right";
|
|
9
|
+
amount: number;
|
|
10
|
+
selector?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
selector?: string | undefined;
|
|
13
|
+
direction?: "up" | "down" | "left" | "right" | undefined;
|
|
14
|
+
amount?: number | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const scrollHandler: import("../../core/registry.js").ToolHandler<Page>;
|
|
17
|
+
//# sourceMappingURL=scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,UAAU;;;;;;;;;;;;EAIrB,CAAC;AAEH,eAAO,MAAM,aAAa,oDAgBC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
+
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { wrapHandler } from '../../core/registry.js';
|
|
5
|
+
export const ScrollArgs = z.object({
|
|
6
|
+
selector: z.string().optional().describe('CSS selector of the element to scroll (defaults to window)'),
|
|
7
|
+
direction: z.enum(['up', 'down', 'left', 'right']).default('down').describe('Scroll direction'),
|
|
8
|
+
amount: z.number().int().min(1).max(10000).default(300).describe('Number of pixels to scroll'),
|
|
9
|
+
});
|
|
10
|
+
export const scrollHandler = wrapHandler(async (args, ctx) => {
|
|
11
|
+
const parsed = ScrollArgs.safeParse(args);
|
|
12
|
+
if (!parsed.success)
|
|
13
|
+
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
|
+
const { selector, direction, amount } = parsed.data;
|
|
15
|
+
const page = await ctx.getPage();
|
|
16
|
+
const scrollX = direction === 'left' ? -amount : direction === 'right' ? amount : 0;
|
|
17
|
+
const scrollY = direction === 'up' ? -amount : direction === 'down' ? amount : 0;
|
|
18
|
+
if (selector) {
|
|
19
|
+
await page.evaluate(({ sel, x, y }) => {
|
|
20
|
+
const el = document.querySelector(sel);
|
|
21
|
+
if (el)
|
|
22
|
+
el.scrollBy(x, y);
|
|
23
|
+
}, { sel: selector, x: scrollX, y: scrollY });
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
await page.evaluate(({ x, y }) => window.scrollBy(x, y), { x: scrollX, y: scrollY });
|
|
27
|
+
}
|
|
28
|
+
return okResult({ scrolled: true, direction, amount, selector: selector ?? 'window' });
|
|
29
|
+
}, ErrorCode.SCROLL_FAILED);
|
|
30
|
+
//# sourceMappingURL=scroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/tools/browser/scroll.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;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IACtG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CAC/F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,EAAE;gBAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;AACzF,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const ExtractWithCssArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
@@ -12,7 +12,7 @@ export const extractWithCssHandler = async (args, ctx) => {
|
|
|
12
12
|
if (!parsed.success)
|
|
13
13
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
14
|
const { selector, attribute, multiple } = parsed.data;
|
|
15
|
-
const
|
|
15
|
+
const sel = sanitizeInput(selector);
|
|
16
16
|
try {
|
|
17
17
|
const page = await ctx.getPage();
|
|
18
18
|
const data = await page.evaluate((opts) => {
|
|
@@ -27,7 +27,7 @@ export const extractWithCssHandler = async (args, ctx) => {
|
|
|
27
27
|
return okResult({ selector: sel, count: data.length, data });
|
|
28
28
|
}
|
|
29
29
|
catch (err) {
|
|
30
|
-
const message =
|
|
30
|
+
const message = normalizeError(err);
|
|
31
31
|
return errorResult(ErrorCode.EXTRACT_CSS_FAILED, message);
|
|
32
32
|
}
|
|
33
33
|
};
|
|
@@ -40,7 +40,7 @@ export const extractTableHandler = async (args, ctx) => {
|
|
|
40
40
|
if (!parsed.success)
|
|
41
41
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
42
42
|
const { selector, header } = parsed.data;
|
|
43
|
-
const
|
|
43
|
+
const sel = sanitizeInput(selector);
|
|
44
44
|
try {
|
|
45
45
|
const page = await ctx.getPage();
|
|
46
46
|
const result = await page.evaluate((opts) => {
|
|
@@ -58,7 +58,7 @@ export const extractTableHandler = async (args, ctx) => {
|
|
|
58
58
|
return okResult(result);
|
|
59
59
|
}
|
|
60
60
|
catch (err) {
|
|
61
|
-
const message =
|
|
61
|
+
const message = normalizeError(err);
|
|
62
62
|
return errorResult(ErrorCode.EXTRACT_TABLE_FAILED, message);
|
|
63
63
|
}
|
|
64
64
|
};
|
|
@@ -83,7 +83,7 @@ export const extractSchemaOrgHandler = async (_args, ctx) => {
|
|
|
83
83
|
return okResult({ schemas: data, count: data.length });
|
|
84
84
|
}
|
|
85
85
|
catch (err) {
|
|
86
|
-
const message =
|
|
86
|
+
const message = normalizeError(err);
|
|
87
87
|
return errorResult(ErrorCode.EXTRACT_SCHEMA_ORG_FAILED, message);
|
|
88
88
|
}
|
|
89
89
|
};
|
|
@@ -105,7 +105,7 @@ export const extractOpenGraphHandler = async (_args, ctx) => {
|
|
|
105
105
|
return okResult({ og: data });
|
|
106
106
|
}
|
|
107
107
|
catch (err) {
|
|
108
|
-
const message =
|
|
108
|
+
const message = normalizeError(err);
|
|
109
109
|
return errorResult(ErrorCode.EXTRACT_OG_FAILED, message);
|
|
110
110
|
}
|
|
111
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-css.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract-css.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;
|
|
1
|
+
{"version":3,"file":"extract-css.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract-css.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
export const ExtractHtmlArgs = z.object({});
|
|
5
5
|
export const extractHtmlHandler = async (_args, ctx) => {
|
|
6
6
|
try {
|
|
@@ -9,7 +9,7 @@ export const extractHtmlHandler = async (_args, ctx) => {
|
|
|
9
9
|
return okResult({ html });
|
|
10
10
|
}
|
|
11
11
|
catch (err) {
|
|
12
|
-
const message =
|
|
12
|
+
const message = normalizeError(err);
|
|
13
13
|
return errorResult(ErrorCode.EXTRACT_HTML_FAILED, message);
|
|
14
14
|
}
|
|
15
15
|
};
|
|
@@ -52,7 +52,7 @@ export const extractMarkdownHandler = async (_args, ctx) => {
|
|
|
52
52
|
return okResult({ markdown: text });
|
|
53
53
|
}
|
|
54
54
|
catch (err) {
|
|
55
|
-
const message =
|
|
55
|
+
const message = normalizeError(err);
|
|
56
56
|
return errorResult(ErrorCode.EXTRACT_MARKDOWN_FAILED, message);
|
|
57
57
|
}
|
|
58
58
|
};
|
|
@@ -64,7 +64,7 @@ export const extractTextHandler = async (_args, ctx) => {
|
|
|
64
64
|
return okResult({ text });
|
|
65
65
|
}
|
|
66
66
|
catch (err) {
|
|
67
|
-
const message =
|
|
67
|
+
const message = normalizeError(err);
|
|
68
68
|
return errorResult(ErrorCode.EXTRACT_TEXT_FAILED, message);
|
|
69
69
|
}
|
|
70
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract.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;
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/tools/extraction/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type { ToolHandler } from '../../core/registry.js';
|
|
3
2
|
import type { Page } from 'playwright';
|
|
4
3
|
export declare const ClickArgs: z.ZodObject<{
|
|
5
4
|
selector: z.ZodString;
|
|
@@ -11,5 +10,5 @@ export declare const ClickArgs: z.ZodObject<{
|
|
|
11
10
|
selector: string;
|
|
12
11
|
timeout?: number | undefined;
|
|
13
12
|
}>;
|
|
14
|
-
export declare const clickHandler: ToolHandler<Page>;
|
|
13
|
+
export declare const clickHandler: import("../../core/registry.js").ToolHandler<Page>;
|
|
15
14
|
//# sourceMappingURL=click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,eAAO,MAAM,SAAS;;;;;;;;;EAGpB,CAAC;AAEH,eAAO,MAAM,YAAY,oDAcC,CAAC"}
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
3
|
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
+
import { wrapHandler } from '../../core/registry.js';
|
|
4
5
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
6
|
export const ClickArgs = z.object({
|
|
6
7
|
selector: z.string().min(1),
|
|
7
8
|
timeout: z.number().int().min(100).max(120000).default(10000),
|
|
8
9
|
});
|
|
9
|
-
export const clickHandler = async (args, ctx) => {
|
|
10
|
+
export const clickHandler = wrapHandler(async (args, ctx) => {
|
|
10
11
|
const parsed = ClickArgs.safeParse(args);
|
|
11
12
|
if (!parsed.success) {
|
|
12
13
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
13
14
|
}
|
|
14
15
|
const { selector, timeout } = parsed.data;
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
16
|
+
const sel = sanitizeInput(selector);
|
|
17
|
+
if (!sel) {
|
|
17
18
|
return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
|
|
18
19
|
}
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return okResult({ clicked: sel });
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
28
|
-
return errorResult(ErrorCode.CLICK_FAILED, message);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
20
|
+
const page = await ctx.getPage();
|
|
21
|
+
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
22
|
+
await page.click(sel, { timeout });
|
|
23
|
+
return okResult({ clicked: sel });
|
|
24
|
+
}, ErrorCode.CLICK_FAILED);
|
|
31
25
|
//# sourceMappingURL=click.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/tools/interaction/click.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;
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../../src/tools/interaction/click.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;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,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,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const DragArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
@@ -12,15 +12,15 @@ export const dragHandler = async (args, ctx) => {
|
|
|
12
12
|
if (!parsed.success)
|
|
13
13
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
14
|
const { selector, targetSelector, timeout } = parsed.data;
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const src = sanitizeInput(selector);
|
|
16
|
+
const tgt = sanitizeInput(targetSelector);
|
|
17
17
|
try {
|
|
18
18
|
const page = await ctx.getPage();
|
|
19
19
|
await page.dragAndDrop(src, tgt, { timeout });
|
|
20
20
|
return okResult({ dragged: src, to: tgt });
|
|
21
21
|
}
|
|
22
22
|
catch (err) {
|
|
23
|
-
const message =
|
|
23
|
+
const message = normalizeError(err);
|
|
24
24
|
return errorResult(ErrorCode.DRAG_FAILED, message);
|
|
25
25
|
}
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag.js","sourceRoot":"","sources":["../../../src/tools/interaction/drag.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;
|
|
1
|
+
{"version":3,"file":"drag.js","sourceRoot":"","sources":["../../../src/tools/interaction/drag.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.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,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.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,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,CA8B/C,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
4
|
-
import { sanitizeInput } from '../../core/sandbox.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
|
+
import { sanitizeInput, validatePath } from '../../core/sandbox.js';
|
|
5
5
|
export const FileUploadArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
7
7
|
paths: z.array(z.string()).min(1),
|
|
@@ -25,12 +25,18 @@ export const fileUploadHandler = async (args, ctx) => {
|
|
|
25
25
|
}
|
|
26
26
|
try {
|
|
27
27
|
const page = await ctx.getPage();
|
|
28
|
-
const input = await page.waitForSelector(sel
|
|
28
|
+
const input = await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
29
|
+
for (const p of paths) {
|
|
30
|
+
const vp = validatePath(p);
|
|
31
|
+
if (!vp.valid) {
|
|
32
|
+
return errorResult(ErrorCode.PATH_BLOCKED, vp.error ?? 'Invalid path');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
29
35
|
await input.setInputFiles(paths);
|
|
30
|
-
return okResult({ uploaded: sel
|
|
36
|
+
return okResult({ uploaded: sel, files: paths.length });
|
|
31
37
|
}
|
|
32
38
|
catch (err) {
|
|
33
|
-
const message =
|
|
39
|
+
const message = normalizeError(err);
|
|
34
40
|
return errorResult(ErrorCode.UPLOAD_FAILED, message);
|
|
35
41
|
}
|
|
36
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.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;
|
|
1
|
+
{"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../../src/tools/interaction/file-upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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,QAAQ;;;;;;;;;;;;EAInB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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,QAAQ;;;;;;;;;;;;EAInB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,IAAI,CAoBzC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const FillArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
@@ -13,13 +13,11 @@ export const fillHandler = async (args, ctx) => {
|
|
|
13
13
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
14
|
}
|
|
15
15
|
const { selector, value, timeout } = parsed.data;
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
16
|
+
const sel = sanitizeInput(selector);
|
|
17
|
+
const val = sanitizeInput(value);
|
|
18
|
+
if (!sel || !val) {
|
|
19
19
|
return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
|
|
20
20
|
}
|
|
21
|
-
const sel = selResult.sanitized;
|
|
22
|
-
const val = valResult.sanitized;
|
|
23
21
|
try {
|
|
24
22
|
const page = await ctx.getPage();
|
|
25
23
|
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
@@ -27,7 +25,7 @@ export const fillHandler = async (args, ctx) => {
|
|
|
27
25
|
return okResult({ filled: sel });
|
|
28
26
|
}
|
|
29
27
|
catch (err) {
|
|
30
|
-
const message =
|
|
28
|
+
const message = normalizeError(err);
|
|
31
29
|
return errorResult(ErrorCode.FILL_FAILED, message);
|
|
32
30
|
}
|
|
33
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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;
|
|
1
|
+
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/tools/interaction/fill.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,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,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const HoverArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
@@ -11,7 +11,7 @@ export const hoverHandler = async (args, ctx) => {
|
|
|
11
11
|
if (!parsed.success)
|
|
12
12
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
13
13
|
const { selector, timeout } = parsed.data;
|
|
14
|
-
const
|
|
14
|
+
const sel = sanitizeInput(selector);
|
|
15
15
|
try {
|
|
16
16
|
const page = await ctx.getPage();
|
|
17
17
|
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
@@ -19,7 +19,7 @@ export const hoverHandler = async (args, ctx) => {
|
|
|
19
19
|
return okResult({ hovered: sel });
|
|
20
20
|
}
|
|
21
21
|
catch (err) {
|
|
22
|
-
const message =
|
|
22
|
+
const message = normalizeError(err);
|
|
23
23
|
return errorResult(ErrorCode.HOVER_FAILED, message);
|
|
24
24
|
}
|
|
25
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../src/tools/interaction/hover.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;
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../src/tools/interaction/hover.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const PressKeyArgs = z.object({
|
|
6
6
|
key: z.string().min(1),
|
|
@@ -10,14 +10,14 @@ export const pressKeyHandler = async (args, ctx) => {
|
|
|
10
10
|
if (!parsed.success)
|
|
11
11
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
12
12
|
const { key } = parsed.data;
|
|
13
|
-
const
|
|
13
|
+
const k = sanitizeInput(key);
|
|
14
14
|
try {
|
|
15
15
|
const page = await ctx.getPage();
|
|
16
16
|
await page.keyboard.press(k);
|
|
17
17
|
return okResult({ pressed: k });
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
|
-
const message =
|
|
20
|
+
const message = normalizeError(err);
|
|
21
21
|
return errorResult(ErrorCode.PRESS_KEY_FAILED, message);
|
|
22
22
|
}
|
|
23
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../../src/tools/interaction/press-key.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;
|
|
1
|
+
{"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../../src/tools/interaction/press-key.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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAsB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { errorResult, okResult } from '../../core/output.js';
|
|
3
|
-
import { ErrorCode } from '../../core/errors.js';
|
|
3
|
+
import { ErrorCode, normalizeError } from '../../core/errors.js';
|
|
4
4
|
import { sanitizeInput } from '../../core/sandbox.js';
|
|
5
5
|
export const SelectArgs = z.object({
|
|
6
6
|
selector: z.string().min(1),
|
|
@@ -12,8 +12,8 @@ export const selectHandler = async (args, ctx) => {
|
|
|
12
12
|
if (!parsed.success)
|
|
13
13
|
return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
|
|
14
14
|
const { selector, values, timeout } = parsed.data;
|
|
15
|
-
const
|
|
16
|
-
const sanitizedValues = values.map(v => sanitizeInput(v)
|
|
15
|
+
const sel = sanitizeInput(selector);
|
|
16
|
+
const sanitizedValues = values.map(v => sanitizeInput(v));
|
|
17
17
|
try {
|
|
18
18
|
const page = await ctx.getPage();
|
|
19
19
|
await page.waitForSelector(sel, { timeout, state: 'visible' });
|
|
@@ -21,7 +21,7 @@ export const selectHandler = async (args, ctx) => {
|
|
|
21
21
|
return okResult({ selected: sel, values: sanitizedValues });
|
|
22
22
|
}
|
|
23
23
|
catch (err) {
|
|
24
|
-
const message =
|
|
24
|
+
const message = normalizeError(err);
|
|
25
25
|
return errorResult(ErrorCode.SELECT_FAILED, message);
|
|
26
26
|
}
|
|
27
27
|
};
|