@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.
Files changed (172) hide show
  1. package/README.md +367 -190
  2. package/dist/core/audit-logger.d.ts +3 -0
  3. package/dist/core/audit-logger.d.ts.map +1 -0
  4. package/dist/core/audit-logger.js +5 -0
  5. package/dist/core/audit-logger.js.map +1 -0
  6. package/dist/core/auth.d.ts.map +1 -1
  7. package/dist/core/auth.js +29 -1
  8. package/dist/core/auth.js.map +1 -1
  9. package/dist/core/body-fetch.d.ts.map +1 -1
  10. package/dist/core/body-fetch.js +26 -2
  11. package/dist/core/body-fetch.js.map +1 -1
  12. package/dist/core/browser-lifecycle.d.ts +29 -0
  13. package/dist/core/browser-lifecycle.d.ts.map +1 -0
  14. package/dist/core/browser-lifecycle.js +107 -0
  15. package/dist/core/browser-lifecycle.js.map +1 -0
  16. package/dist/core/browser-provider.d.ts +7 -3
  17. package/dist/core/browser-provider.d.ts.map +1 -1
  18. package/dist/core/browser-provider.js +65 -10
  19. package/dist/core/browser-provider.js.map +1 -1
  20. package/dist/core/config.d.ts +30 -6
  21. package/dist/core/config.d.ts.map +1 -1
  22. package/dist/core/config.js +9 -0
  23. package/dist/core/config.js.map +1 -1
  24. package/dist/core/errors.d.ts +0 -12
  25. package/dist/core/errors.d.ts.map +1 -1
  26. package/dist/core/errors.js +4 -13
  27. package/dist/core/errors.js.map +1 -1
  28. package/dist/core/index.d.ts +4 -0
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +3 -0
  31. package/dist/core/index.js.map +1 -0
  32. package/dist/core/network-capture-utils.d.ts +49 -0
  33. package/dist/core/network-capture-utils.d.ts.map +1 -0
  34. package/dist/core/network-capture-utils.js +56 -0
  35. package/dist/core/network-capture-utils.js.map +1 -0
  36. package/dist/core/network-capture.d.ts +3 -39
  37. package/dist/core/network-capture.d.ts.map +1 -1
  38. package/dist/core/network-capture.js +20 -53
  39. package/dist/core/network-capture.js.map +1 -1
  40. package/dist/core/network-export.d.ts +3 -3
  41. package/dist/core/network-export.d.ts.map +1 -1
  42. package/dist/core/network-export.js +20 -21
  43. package/dist/core/network-export.js.map +1 -1
  44. package/dist/core/output.d.ts +0 -28
  45. package/dist/core/output.d.ts.map +1 -1
  46. package/dist/core/registry.d.ts +2 -0
  47. package/dist/core/registry.d.ts.map +1 -1
  48. package/dist/core/registry.js +14 -3
  49. package/dist/core/registry.js.map +1 -1
  50. package/dist/core/sandbox.d.ts +4 -5
  51. package/dist/core/sandbox.d.ts.map +1 -1
  52. package/dist/core/sandbox.js +31 -23
  53. package/dist/core/sandbox.js.map +1 -1
  54. package/dist/core/session.d.ts +4 -3
  55. package/dist/core/session.d.ts.map +1 -1
  56. package/dist/core/session.js +43 -22
  57. package/dist/core/session.js.map +1 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/prompts/index.d.ts.map +1 -1
  62. package/dist/prompts/index.js +2 -1
  63. package/dist/prompts/index.js.map +1 -1
  64. package/dist/tools/admin/cache.js +3 -3
  65. package/dist/tools/admin/cache.js.map +1 -1
  66. package/dist/tools/admin/server-status.js +2 -2
  67. package/dist/tools/admin/server-status.js.map +1 -1
  68. package/dist/tools/browser/cookies.js +4 -4
  69. package/dist/tools/browser/cookies.js.map +1 -1
  70. package/dist/tools/browser/download.js +2 -2
  71. package/dist/tools/browser/download.js.map +1 -1
  72. package/dist/tools/browser/evaluate.d.ts.map +1 -1
  73. package/dist/tools/browser/evaluate.js +23 -6
  74. package/dist/tools/browser/evaluate.js.map +1 -1
  75. package/dist/tools/browser/index.d.ts.map +1 -1
  76. package/dist/tools/browser/index.js +2 -0
  77. package/dist/tools/browser/index.js.map +1 -1
  78. package/dist/tools/browser/page-info.js +2 -2
  79. package/dist/tools/browser/page-info.js.map +1 -1
  80. package/dist/tools/browser/pdf.js +4 -4
  81. package/dist/tools/browser/pdf.js.map +1 -1
  82. package/dist/tools/browser/screenshot.js +3 -3
  83. package/dist/tools/browser/screenshot.js.map +1 -1
  84. package/dist/tools/browser/scroll.d.ts +17 -0
  85. package/dist/tools/browser/scroll.d.ts.map +1 -0
  86. package/dist/tools/browser/scroll.js +30 -0
  87. package/dist/tools/browser/scroll.js.map +1 -0
  88. package/dist/tools/extraction/extract-css.js +7 -7
  89. package/dist/tools/extraction/extract-css.js.map +1 -1
  90. package/dist/tools/extraction/extract.js +4 -4
  91. package/dist/tools/extraction/extract.js.map +1 -1
  92. package/dist/tools/interaction/click.d.ts +1 -2
  93. package/dist/tools/interaction/click.d.ts.map +1 -1
  94. package/dist/tools/interaction/click.js +9 -15
  95. package/dist/tools/interaction/click.js.map +1 -1
  96. package/dist/tools/interaction/drag.js +4 -4
  97. package/dist/tools/interaction/drag.js.map +1 -1
  98. package/dist/tools/interaction/file-upload.d.ts.map +1 -1
  99. package/dist/tools/interaction/file-upload.js +11 -5
  100. package/dist/tools/interaction/file-upload.js.map +1 -1
  101. package/dist/tools/interaction/fill.d.ts.map +1 -1
  102. package/dist/tools/interaction/fill.js +5 -7
  103. package/dist/tools/interaction/fill.js.map +1 -1
  104. package/dist/tools/interaction/hover.js +3 -3
  105. package/dist/tools/interaction/hover.js.map +1 -1
  106. package/dist/tools/interaction/press-key.js +3 -3
  107. package/dist/tools/interaction/press-key.js.map +1 -1
  108. package/dist/tools/interaction/select.js +4 -4
  109. package/dist/tools/interaction/select.js.map +1 -1
  110. package/dist/tools/interaction/type.d.ts +1 -1
  111. package/dist/tools/interaction/type.js +4 -4
  112. package/dist/tools/interaction/type.js.map +1 -1
  113. package/dist/tools/navigation/back.js +2 -2
  114. package/dist/tools/navigation/back.js.map +1 -1
  115. package/dist/tools/navigation/forward.js +2 -2
  116. package/dist/tools/navigation/forward.js.map +1 -1
  117. package/dist/tools/navigation/navigate.js +2 -2
  118. package/dist/tools/navigation/navigate.js.map +1 -1
  119. package/dist/tools/navigation/refresh.js +2 -2
  120. package/dist/tools/navigation/refresh.js.map +1 -1
  121. package/dist/tools/navigation/wait-for.js +2 -2
  122. package/dist/tools/navigation/wait-for.js.map +1 -1
  123. package/dist/tools/network/console.js +2 -2
  124. package/dist/tools/network/console.js.map +1 -1
  125. package/dist/tools/network/dialog.js +2 -2
  126. package/dist/tools/network/dialog.js.map +1 -1
  127. package/dist/tools/network/network-clear.js +2 -2
  128. package/dist/tools/network/network-clear.js.map +1 -1
  129. package/dist/tools/network/network-entries.d.ts +3 -0
  130. package/dist/tools/network/network-entries.d.ts.map +1 -1
  131. package/dist/tools/network/network-entries.js +11 -3
  132. package/dist/tools/network/network-entries.js.map +1 -1
  133. package/dist/tools/network/network-export.d.ts +2 -2
  134. package/dist/tools/network/network-export.js +2 -2
  135. package/dist/tools/network/network-export.js.map +1 -1
  136. package/dist/tools/network/network-requests.js +2 -2
  137. package/dist/tools/network/network-requests.js.map +1 -1
  138. package/dist/tools/network/network-response.d.ts +3 -0
  139. package/dist/tools/network/network-response.d.ts.map +1 -1
  140. package/dist/tools/network/network-response.js +9 -4
  141. package/dist/tools/network/network-response.js.map +1 -1
  142. package/dist/tools/network/network-save.js +2 -2
  143. package/dist/tools/network/network-save.js.map +1 -1
  144. package/dist/tools/network/wait-nav.js +2 -2
  145. package/dist/tools/network/wait-nav.js.map +1 -1
  146. package/dist/tools/network/websocket-frames.js +2 -2
  147. package/dist/tools/network/websocket-frames.js.map +1 -1
  148. package/dist/tools/re/api-discover.d.ts +3 -3
  149. package/dist/tools/re/api-discover.d.ts.map +1 -1
  150. package/dist/tools/re/api-discover.js +32 -11
  151. package/dist/tools/re/api-discover.js.map +1 -1
  152. package/dist/tools/re/auth-analyze.d.ts +3 -3
  153. package/dist/tools/re/auth-analyze.d.ts.map +1 -1
  154. package/dist/tools/re/auth-analyze.js +43 -6
  155. package/dist/tools/re/auth-analyze.js.map +1 -1
  156. package/dist/tools/re/js-beautify.js +3 -3
  157. package/dist/tools/re/js-beautify.js.map +1 -1
  158. package/dist/tools/re/js-deobfuscate.js +3 -3
  159. package/dist/tools/re/js-deobfuscate.js.map +1 -1
  160. package/dist/tools/session/close.js +2 -2
  161. package/dist/tools/session/close.js.map +1 -1
  162. package/dist/tools/session/list.js +2 -2
  163. package/dist/tools/session/list.js.map +1 -1
  164. package/dist/tools/session/open.js +2 -2
  165. package/dist/tools/session/open.js.map +1 -1
  166. package/dist/tools/stealth/fingerprint.d.ts +13 -0
  167. package/dist/tools/stealth/fingerprint.d.ts.map +1 -1
  168. package/dist/tools/stealth/fingerprint.js +16 -3
  169. package/dist/tools/stealth/fingerprint.js.map +1 -1
  170. package/dist/tools/stealth/human-behavior.js +2 -2
  171. package/dist/tools/stealth/human-behavior.js.map +1 -1
  172. 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;AAIjD,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,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,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).sanitized;
40
+ pdfOpts.headerTemplate = sanitizeInput(parsed.data.headerTemplate);
41
41
  if (parsed.data.footerTemplate)
42
- pdfOpts.footerTemplate = sanitizeInput(parsed.data.footerTemplate).sanitized;
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 = err instanceof Error ? err.message : String(err);
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":"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"}
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 { sanitized: sel } = sanitizeInput(selector);
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 = err instanceof Error ? err.message : String(err);
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;AACjD,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,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,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,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,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 { sanitized: sel } = sanitizeInput(selector);
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 = err instanceof Error ? err.message : String(err);
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 { sanitized: sel } = sanitizeInput(selector);
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 = err instanceof Error ? err.message : String(err);
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 = err instanceof Error ? err.message : String(err);
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 = err instanceof Error ? err.message : String(err);
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":"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"}
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 = err instanceof Error ? err.message : String(err);
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 = err instanceof Error ? err.message : String(err);
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 = err instanceof Error ? err.message : String(err);
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":"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"}
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;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,eAAO,MAAM,SAAS;;;;;;;;;EAGpB,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,IAAI,CAoB1C,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 selResult = sanitizeInput(selector);
16
- if (selResult.blocked) {
16
+ const sel = sanitizeInput(selector);
17
+ if (!sel) {
17
18
  return errorResult(ErrorCode.URL_BLOCKED, 'Input contains potentially unsafe characters');
18
19
  }
19
- const sel = selResult.sanitized;
20
- try {
21
- const page = await ctx.getPage();
22
- await page.waitForSelector(sel, { timeout, state: 'visible' });
23
- await page.click(sel, { timeout });
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;AAGjD,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,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,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,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,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,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 { sanitized: src } = sanitizeInput(selector);
16
- const { sanitized: tgt } = sanitizeInput(targetSelector);
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 = err instanceof Error ? err.message : String(err);
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;AAGjD,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,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACzD,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,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"}
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,CAwB/C,CAAC"}
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.sanitized, { timeout, state: 'visible' });
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.sanitized, files: paths.length });
36
+ return okResult({ uploaded: sel, files: paths.length });
31
37
  }
32
38
  catch (err) {
33
- const message = err instanceof Error ? err.message : String(err);
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;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,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,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,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/F,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,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"}
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,CAsBzC,CAAC"}
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 selResult = sanitizeInput(selector);
17
- const valResult = sanitizeInput(value);
18
- if (selResult.blocked || valResult.blocked) {
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 = err instanceof Error ? err.message : String(err);
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;AAGjD,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,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;IAChC,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,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"}
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 { sanitized: sel } = sanitizeInput(selector);
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 = err instanceof Error ? err.message : String(err);
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;AAGjD,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,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,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,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,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 { sanitized: k } = sanitizeInput(key);
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 = err instanceof Error ? err.message : String(err);
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;AAGjD,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,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,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,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,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 { sanitized: sel } = sanitizeInput(selector);
16
- const sanitizedValues = values.map(v => sanitizeInput(v).sanitized);
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 = err instanceof Error ? err.message : String(err);
24
+ const message = normalizeError(err);
25
25
  return errorResult(ErrorCode.SELECT_FAILED, message);
26
26
  }
27
27
  };