@natchs/browser-mcp 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +141 -0
  2. package/dist/core/auth.d.ts +7 -0
  3. package/dist/core/auth.d.ts.map +1 -0
  4. package/dist/core/auth.js +23 -0
  5. package/dist/core/auth.js.map +1 -0
  6. package/dist/core/cache.d.ts +24 -0
  7. package/dist/core/cache.d.ts.map +1 -0
  8. package/dist/core/cache.js +67 -0
  9. package/dist/core/cache.js.map +1 -0
  10. package/dist/core/config.d.ts +362 -0
  11. package/dist/core/config.d.ts.map +1 -0
  12. package/dist/core/config.js +281 -0
  13. package/dist/core/config.js.map +1 -0
  14. package/dist/core/context.d.ts +38 -0
  15. package/dist/core/context.d.ts.map +1 -0
  16. package/dist/core/context.js +19 -0
  17. package/dist/core/context.js.map +1 -0
  18. package/dist/core/errors.d.ts +82 -0
  19. package/dist/core/errors.d.ts.map +1 -0
  20. package/dist/core/errors.js +98 -0
  21. package/dist/core/errors.js.map +1 -0
  22. package/dist/core/logger.d.ts +22 -0
  23. package/dist/core/logger.d.ts.map +1 -0
  24. package/dist/core/logger.js +41 -0
  25. package/dist/core/logger.js.map +1 -0
  26. package/dist/core/metrics.d.ts +24 -0
  27. package/dist/core/metrics.d.ts.map +1 -0
  28. package/dist/core/metrics.js +59 -0
  29. package/dist/core/metrics.js.map +1 -0
  30. package/dist/core/network-capture.d.ts +117 -0
  31. package/dist/core/network-capture.d.ts.map +1 -0
  32. package/dist/core/network-capture.js +349 -0
  33. package/dist/core/network-capture.js.map +1 -0
  34. package/dist/core/network-export.d.ts +6 -0
  35. package/dist/core/network-export.d.ts.map +1 -0
  36. package/dist/core/network-export.js +163 -0
  37. package/dist/core/network-export.js.map +1 -0
  38. package/dist/core/output.d.ts +66 -0
  39. package/dist/core/output.d.ts.map +1 -0
  40. package/dist/core/output.js +114 -0
  41. package/dist/core/output.js.map +1 -0
  42. package/dist/core/pipeline.d.ts +25 -0
  43. package/dist/core/pipeline.d.ts.map +1 -0
  44. package/dist/core/pipeline.js +52 -0
  45. package/dist/core/pipeline.js.map +1 -0
  46. package/dist/core/plugin.d.ts +26 -0
  47. package/dist/core/plugin.d.ts.map +1 -0
  48. package/dist/core/plugin.js +49 -0
  49. package/dist/core/plugin.js.map +1 -0
  50. package/dist/core/rate-limit.d.ts +33 -0
  51. package/dist/core/rate-limit.d.ts.map +1 -0
  52. package/dist/core/rate-limit.js +89 -0
  53. package/dist/core/rate-limit.js.map +1 -0
  54. package/dist/core/registry.d.ts +67 -0
  55. package/dist/core/registry.d.ts.map +1 -0
  56. package/dist/core/registry.js +270 -0
  57. package/dist/core/registry.js.map +1 -0
  58. package/dist/core/sandbox.d.ts +20 -0
  59. package/dist/core/sandbox.d.ts.map +1 -0
  60. package/dist/core/sandbox.js +168 -0
  61. package/dist/core/sandbox.js.map +1 -0
  62. package/dist/core/schema-gen.d.ts +5 -0
  63. package/dist/core/schema-gen.d.ts.map +1 -0
  64. package/dist/core/schema-gen.js +115 -0
  65. package/dist/core/schema-gen.js.map +1 -0
  66. package/dist/core/session.d.ts +88 -0
  67. package/dist/core/session.d.ts.map +1 -0
  68. package/dist/core/session.js +300 -0
  69. package/dist/core/session.js.map +1 -0
  70. package/dist/index.d.ts +5 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +192 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/prompts/index.d.ts +11 -0
  75. package/dist/prompts/index.d.ts.map +1 -0
  76. package/dist/prompts/index.js +121 -0
  77. package/dist/prompts/index.js.map +1 -0
  78. package/dist/tools/admin/cache.d.ts +7 -0
  79. package/dist/tools/admin/cache.d.ts.map +1 -0
  80. package/dist/tools/admin/cache.js +27 -0
  81. package/dist/tools/admin/cache.js.map +1 -0
  82. package/dist/tools/admin/index.d.ts +3 -0
  83. package/dist/tools/admin/index.d.ts.map +1 -0
  84. package/dist/tools/admin/index.js +9 -0
  85. package/dist/tools/admin/index.js.map +1 -0
  86. package/dist/tools/admin/server-status.d.ts +14 -0
  87. package/dist/tools/admin/server-status.d.ts.map +1 -0
  88. package/dist/tools/admin/server-status.js +33 -0
  89. package/dist/tools/admin/server-status.js.map +1 -0
  90. package/dist/tools/browser/cookies.d.ts +46 -0
  91. package/dist/tools/browser/cookies.d.ts.map +1 -0
  92. package/dist/tools/browser/cookies.js +65 -0
  93. package/dist/tools/browser/cookies.js.map +1 -0
  94. package/dist/tools/browser/evaluate.d.ts +12 -0
  95. package/dist/tools/browser/evaluate.d.ts.map +1 -0
  96. package/dist/tools/browser/evaluate.js +61 -0
  97. package/dist/tools/browser/evaluate.js.map +1 -0
  98. package/dist/tools/browser/index.d.ts +3 -0
  99. package/dist/tools/browser/index.d.ts.map +1 -0
  100. package/dist/tools/browser/index.js +17 -0
  101. package/dist/tools/browser/index.js.map +1 -0
  102. package/dist/tools/browser/page-info.d.ts +6 -0
  103. package/dist/tools/browser/page-info.d.ts.map +1 -0
  104. package/dist/tools/browser/page-info.js +25 -0
  105. package/dist/tools/browser/page-info.js.map +1 -0
  106. package/dist/tools/browser/pdf.d.ts +45 -0
  107. package/dist/tools/browser/pdf.d.ts.map +1 -0
  108. package/dist/tools/browser/pdf.js +57 -0
  109. package/dist/tools/browser/pdf.js.map +1 -0
  110. package/dist/tools/browser/screenshot.d.ts +21 -0
  111. package/dist/tools/browser/screenshot.d.ts.map +1 -0
  112. package/dist/tools/browser/screenshot.js +41 -0
  113. package/dist/tools/browser/screenshot.js.map +1 -0
  114. package/dist/tools/extraction/extract-css.d.ts +33 -0
  115. package/dist/tools/extraction/extract-css.d.ts.map +1 -0
  116. package/dist/tools/extraction/extract-css.js +112 -0
  117. package/dist/tools/extraction/extract-css.js.map +1 -0
  118. package/dist/tools/extraction/extract.d.ts +10 -0
  119. package/dist/tools/extraction/extract.d.ts.map +1 -0
  120. package/dist/tools/extraction/extract.js +71 -0
  121. package/dist/tools/extraction/extract.js.map +1 -0
  122. package/dist/tools/extraction/index.d.ts +3 -0
  123. package/dist/tools/extraction/index.d.ts.map +1 -0
  124. package/dist/tools/extraction/index.js +17 -0
  125. package/dist/tools/extraction/index.js.map +1 -0
  126. package/dist/tools/interaction/click.d.ts +15 -0
  127. package/dist/tools/interaction/click.d.ts.map +1 -0
  128. package/dist/tools/interaction/click.js +31 -0
  129. package/dist/tools/interaction/click.js.map +1 -0
  130. package/dist/tools/interaction/drag.d.ts +18 -0
  131. package/dist/tools/interaction/drag.d.ts.map +1 -0
  132. package/dist/tools/interaction/drag.js +27 -0
  133. package/dist/tools/interaction/drag.js.map +1 -0
  134. package/dist/tools/interaction/file-upload.d.ts +18 -0
  135. package/dist/tools/interaction/file-upload.d.ts.map +1 -0
  136. package/dist/tools/interaction/file-upload.js +37 -0
  137. package/dist/tools/interaction/file-upload.js.map +1 -0
  138. package/dist/tools/interaction/fill.d.ts +18 -0
  139. package/dist/tools/interaction/fill.d.ts.map +1 -0
  140. package/dist/tools/interaction/fill.js +34 -0
  141. package/dist/tools/interaction/fill.js.map +1 -0
  142. package/dist/tools/interaction/hover.d.ts +15 -0
  143. package/dist/tools/interaction/hover.d.ts.map +1 -0
  144. package/dist/tools/interaction/hover.js +26 -0
  145. package/dist/tools/interaction/hover.js.map +1 -0
  146. package/dist/tools/interaction/index.d.ts +3 -0
  147. package/dist/tools/interaction/index.d.ts.map +1 -0
  148. package/dist/tools/interaction/index.js +19 -0
  149. package/dist/tools/interaction/index.js.map +1 -0
  150. package/dist/tools/interaction/press-key.d.ts +12 -0
  151. package/dist/tools/interaction/press-key.d.ts.map +1 -0
  152. package/dist/tools/interaction/press-key.js +24 -0
  153. package/dist/tools/interaction/press-key.js.map +1 -0
  154. package/dist/tools/interaction/select.d.ts +18 -0
  155. package/dist/tools/interaction/select.d.ts.map +1 -0
  156. package/dist/tools/interaction/select.js +28 -0
  157. package/dist/tools/interaction/select.js.map +1 -0
  158. package/dist/tools/interaction/type.d.ts +21 -0
  159. package/dist/tools/interaction/type.d.ts.map +1 -0
  160. package/dist/tools/interaction/type.js +30 -0
  161. package/dist/tools/interaction/type.js.map +1 -0
  162. package/dist/tools/navigation/back.d.ts +6 -0
  163. package/dist/tools/navigation/back.d.ts.map +1 -0
  164. package/dist/tools/navigation/back.js +16 -0
  165. package/dist/tools/navigation/back.js.map +1 -0
  166. package/dist/tools/navigation/forward.d.ts +6 -0
  167. package/dist/tools/navigation/forward.d.ts.map +1 -0
  168. package/dist/tools/navigation/forward.js +16 -0
  169. package/dist/tools/navigation/forward.js.map +1 -0
  170. package/dist/tools/navigation/index.d.ts +3 -0
  171. package/dist/tools/navigation/index.d.ts.map +1 -0
  172. package/dist/tools/navigation/index.js +13 -0
  173. package/dist/tools/navigation/index.js.map +1 -0
  174. package/dist/tools/navigation/navigate.d.ts +19 -0
  175. package/dist/tools/navigation/navigate.d.ts.map +1 -0
  176. package/dist/tools/navigation/navigate.js +52 -0
  177. package/dist/tools/navigation/navigate.js.map +1 -0
  178. package/dist/tools/navigation/refresh.d.ts +15 -0
  179. package/dist/tools/navigation/refresh.d.ts.map +1 -0
  180. package/dist/tools/navigation/refresh.js +26 -0
  181. package/dist/tools/navigation/refresh.js.map +1 -0
  182. package/dist/tools/navigation/wait-for.d.ts +12 -0
  183. package/dist/tools/navigation/wait-for.d.ts.map +1 -0
  184. package/dist/tools/navigation/wait-for.js +23 -0
  185. package/dist/tools/navigation/wait-for.js.map +1 -0
  186. package/dist/tools/network/console.d.ts +17 -0
  187. package/dist/tools/network/console.d.ts.map +1 -0
  188. package/dist/tools/network/console.js +29 -0
  189. package/dist/tools/network/console.js.map +1 -0
  190. package/dist/tools/network/dialog.d.ts +14 -0
  191. package/dist/tools/network/dialog.d.ts.map +1 -0
  192. package/dist/tools/network/dialog.js +34 -0
  193. package/dist/tools/network/dialog.js.map +1 -0
  194. package/dist/tools/network/index.d.ts +3 -0
  195. package/dist/tools/network/index.d.ts.map +1 -0
  196. package/dist/tools/network/index.js +21 -0
  197. package/dist/tools/network/index.js.map +1 -0
  198. package/dist/tools/network/network-clear.d.ts +11 -0
  199. package/dist/tools/network/network-clear.d.ts.map +1 -0
  200. package/dist/tools/network/network-clear.js +24 -0
  201. package/dist/tools/network/network-clear.js.map +1 -0
  202. package/dist/tools/network/network-entries.d.ts +35 -0
  203. package/dist/tools/network/network-entries.d.ts.map +1 -0
  204. package/dist/tools/network/network-entries.js +73 -0
  205. package/dist/tools/network/network-entries.js.map +1 -0
  206. package/dist/tools/network/network-export.d.ts +14 -0
  207. package/dist/tools/network/network-export.d.ts.map +1 -0
  208. package/dist/tools/network/network-export.js +24 -0
  209. package/dist/tools/network/network-export.js.map +1 -0
  210. package/dist/tools/network/network-requests.d.ts +20 -0
  211. package/dist/tools/network/network-requests.d.ts.map +1 -0
  212. package/dist/tools/network/network-requests.js +36 -0
  213. package/dist/tools/network/network-requests.js.map +1 -0
  214. package/dist/tools/network/network-response.d.ts +14 -0
  215. package/dist/tools/network/network-response.d.ts.map +1 -0
  216. package/dist/tools/network/network-response.js +56 -0
  217. package/dist/tools/network/network-response.js.map +1 -0
  218. package/dist/tools/network/wait-nav.d.ts +15 -0
  219. package/dist/tools/network/wait-nav.d.ts.map +1 -0
  220. package/dist/tools/network/wait-nav.js +26 -0
  221. package/dist/tools/network/wait-nav.js.map +1 -0
  222. package/dist/tools/network/websocket-frames.d.ts +17 -0
  223. package/dist/tools/network/websocket-frames.d.ts.map +1 -0
  224. package/dist/tools/network/websocket-frames.js +24 -0
  225. package/dist/tools/network/websocket-frames.js.map +1 -0
  226. package/dist/tools/re/api-discover.d.ts +11 -0
  227. package/dist/tools/re/api-discover.d.ts.map +1 -0
  228. package/dist/tools/re/api-discover.js +57 -0
  229. package/dist/tools/re/api-discover.js.map +1 -0
  230. package/dist/tools/re/auth-analyze.d.ts +11 -0
  231. package/dist/tools/re/auth-analyze.d.ts.map +1 -0
  232. package/dist/tools/re/auth-analyze.js +86 -0
  233. package/dist/tools/re/auth-analyze.js.map +1 -0
  234. package/dist/tools/re/index.d.ts +3 -0
  235. package/dist/tools/re/index.d.ts.map +1 -0
  236. package/dist/tools/re/index.js +11 -0
  237. package/dist/tools/re/index.js.map +1 -0
  238. package/dist/tools/re/js-beautify.d.ts +14 -0
  239. package/dist/tools/re/js-beautify.d.ts.map +1 -0
  240. package/dist/tools/re/js-beautify.js +132 -0
  241. package/dist/tools/re/js-beautify.js.map +1 -0
  242. package/dist/tools/re/js-deobfuscate.d.ts +11 -0
  243. package/dist/tools/re/js-deobfuscate.d.ts.map +1 -0
  244. package/dist/tools/re/js-deobfuscate.js +96 -0
  245. package/dist/tools/re/js-deobfuscate.js.map +1 -0
  246. package/dist/tools/session/close.d.ts +11 -0
  247. package/dist/tools/session/close.d.ts.map +1 -0
  248. package/dist/tools/session/close.js +24 -0
  249. package/dist/tools/session/close.js.map +1 -0
  250. package/dist/tools/session/index.d.ts +3 -0
  251. package/dist/tools/session/index.d.ts.map +1 -0
  252. package/dist/tools/session/index.js +9 -0
  253. package/dist/tools/session/index.js.map +1 -0
  254. package/dist/tools/session/list.d.ts +14 -0
  255. package/dist/tools/session/list.d.ts.map +1 -0
  256. package/dist/tools/session/list.js +26 -0
  257. package/dist/tools/session/list.js.map +1 -0
  258. package/dist/tools/session/open.d.ts +11 -0
  259. package/dist/tools/session/open.d.ts.map +1 -0
  260. package/dist/tools/session/open.js +25 -0
  261. package/dist/tools/session/open.js.map +1 -0
  262. package/dist/tools/stealth/fingerprint.d.ts +11 -0
  263. package/dist/tools/stealth/fingerprint.d.ts.map +1 -0
  264. package/dist/tools/stealth/fingerprint.js +72 -0
  265. package/dist/tools/stealth/fingerprint.js.map +1 -0
  266. package/dist/tools/stealth/human-behavior.d.ts +29 -0
  267. package/dist/tools/stealth/human-behavior.d.ts.map +1 -0
  268. package/dist/tools/stealth/human-behavior.js +86 -0
  269. package/dist/tools/stealth/human-behavior.js.map +1 -0
  270. package/dist/tools/stealth/index.d.ts +3 -0
  271. package/dist/tools/stealth/index.d.ts.map +1 -0
  272. package/dist/tools/stealth/index.js +7 -0
  273. package/dist/tools/stealth/index.js.map +1 -0
  274. package/package.json +40 -0
package/dist/index.js ADDED
@@ -0,0 +1,192 @@
1
+ import { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { fileURLToPath } from 'url';
4
+ import { SessionManager } from './core/session.js';
5
+ import { ToolRegistry } from './core/registry.js';
6
+ import { PluginManager } from './core/plugin.js';
7
+ import { createMetricsPlugin } from './core/metrics.js';
8
+ import { createToolContext } from './core/context.js';
9
+ import { getConfig } from './core/config.js';
10
+ import { RateLimiter } from './core/rate-limit.js';
11
+ import { ResultCache } from './core/cache.js';
12
+ import { formatOutput } from './core/output.js';
13
+ import { ErrorCode } from './core/errors.js';
14
+ import { Pipeline, createLoggingMiddleware } from './core/pipeline.js';
15
+ import { logger } from './core/logger.js';
16
+ import { createAuthMiddleware } from './core/auth.js';
17
+ import { registerPrompts } from './prompts/index.js';
18
+ import { registerNavigationTools } from './tools/navigation/index.js';
19
+ import { registerInteractionTools } from './tools/interaction/index.js';
20
+ import { registerExtractionTools } from './tools/extraction/index.js';
21
+ import { registerNetworkTools } from './tools/network/index.js';
22
+ import { registerBrowserTools } from './tools/browser/index.js';
23
+ import { registerSessionTools } from './tools/session/index.js';
24
+ import { registerAdminTools } from './tools/admin/index.js';
25
+ import { registerRETools } from './tools/re/index.js';
26
+ import { registerStealthTools } from './tools/stealth/index.js';
27
+ const SESSION_ID = 'default';
28
+ function buildDefaultRegistry() {
29
+ const pluginManager = new PluginManager();
30
+ pluginManager.register(createMetricsPlugin());
31
+ const registry = new ToolRegistry(pluginManager);
32
+ registerNavigationTools(registry);
33
+ registerInteractionTools(registry);
34
+ registerExtractionTools(registry);
35
+ registerNetworkTools(registry);
36
+ registerBrowserTools(registry);
37
+ registerSessionTools(registry);
38
+ registerAdminTools(registry);
39
+ registerRETools(registry);
40
+ registerStealthTools(registry);
41
+ return registry;
42
+ }
43
+ export function createServer(registry, sessionManager, apiKey) {
44
+ const reg = registry ?? buildDefaultRegistry();
45
+ const sm = sessionManager ?? new SessionManager({
46
+ maxSessions: getConfig().security.maxSessions,
47
+ });
48
+ const config = getConfig();
49
+ const rateLimiter = new RateLimiter(config.rateLimit);
50
+ const cache = new ResultCache({
51
+ maxEntries: config.cache.maxEntries,
52
+ ttlMs: config.cache.ttlSeconds * 1000,
53
+ });
54
+ const server = new McpServer({ name: 'browser-mcp', version: '1.0.0' }, { capabilities: { tools: {}, prompts: {}, resources: {} } });
55
+ registerPrompts(server);
56
+ // Build middleware pipeline: log -> auth -> rate-limit
57
+ const pipeline = new Pipeline();
58
+ pipeline.use(createLoggingMiddleware());
59
+ pipeline.use(createAuthMiddleware(apiKey));
60
+ pipeline.use(async (pc, next) => {
61
+ if (!rateLimiter.check(pc.toolName)) {
62
+ return {
63
+ ...pc,
64
+ response: {
65
+ content: [{ type: 'text', text: JSON.stringify({
66
+ ok: false,
67
+ error: { code: ErrorCode.RATE_LIMITED, message: `Rate limit exceeded for tool: ${pc.toolName}` },
68
+ }) }],
69
+ },
70
+ };
71
+ }
72
+ return next();
73
+ });
74
+ const sessionProxy = {
75
+ getNetworkRequests: () => sm.getNetworkRequests(SESSION_ID),
76
+ getNetworkEntries: () => sm.getNetworkEntries(SESSION_ID),
77
+ getWebSocketFrames: (wsId) => sm.getWebSocketFrames(SESSION_ID, wsId),
78
+ flushNetworkCaptures: () => sm.flushNetworkCaptures(SESSION_ID),
79
+ exportNetworkLog: (format, outputPath) => sm.exportNetworkLog(SESSION_ID, format, outputPath),
80
+ clearNetworkRequests: () => sm.clearNetworkRequests(SESSION_ID),
81
+ getPendingDialog: () => sm.getPendingDialog(SESSION_ID),
82
+ clearPendingDialog: () => sm.clearPendingDialog(SESSION_ID),
83
+ getConsoleMessages: () => sm.getConsoleMessages(SESSION_ID),
84
+ clearConsoleMessages: () => sm.clearConsoleMessages(SESSION_ID),
85
+ };
86
+ for (const tool of reg.getAllTools()) {
87
+ const toolConfig = reg.getToolConfig(tool.name);
88
+ const needsBrowser = toolConfig?.needsBrowser !== false;
89
+ server.registerTool(tool.name, {
90
+ description: tool.description,
91
+ inputSchema: tool.inputSchema,
92
+ }, async (args) => {
93
+ // Cache check (before pipeline to avoid unnecessary work)
94
+ const isCacheable = reg.getCacheable(tool.name);
95
+ const cacheKey = cache.makeKey(tool.name, args);
96
+ if (isCacheable) {
97
+ const cached = cache.get(cacheKey);
98
+ if (cached)
99
+ return JSON.parse(cached);
100
+ }
101
+ // Session
102
+ if (needsBrowser) {
103
+ await sm.getOrCreateSession(SESSION_ID);
104
+ }
105
+ // Create context
106
+ const ctx = createToolContext({
107
+ getPage: needsBrowser
108
+ ? () => sm.getPage(SESSION_ID)
109
+ : () => { throw new Error('This tool does not use a browser session'); },
110
+ }, { config, cache, rateLimiter }, needsBrowser ? sessionProxy : undefined, sm);
111
+ // Run pipeline (auth -> rate-limit)
112
+ const pc = await pipeline.run({
113
+ toolName: tool.name,
114
+ args,
115
+ registry: reg,
116
+ ctx,
117
+ });
118
+ // If middleware short-circuited (auth fail, rate limit, etc.)
119
+ if (pc.response) {
120
+ logger.warn('Handler blocked by middleware', { event: 'tool.blocked', tool: tool.name });
121
+ return formatOutput(pc.response, args.response_format);
122
+ }
123
+ // Execute via registry
124
+ const execStart = Date.now();
125
+ const result = await reg.execute(tool.name, args, ctx);
126
+ const execDuration = Date.now() - execStart;
127
+ const parsed = JSON.parse(result.content[0].text);
128
+ if (parsed.ok === false) {
129
+ logger.warn('Handler error', { event: 'tool.handler.error', tool: tool.name, duration: execDuration, error: parsed.error?.message ?? parsed.error });
130
+ }
131
+ else {
132
+ logger.info('Handler complete', { event: 'tool.handler.complete', tool: tool.name, duration: execDuration });
133
+ }
134
+ // Cache
135
+ if (isCacheable) {
136
+ cache.put(cacheKey, JSON.stringify(result));
137
+ }
138
+ return formatOutput(result, args.response_format);
139
+ });
140
+ }
141
+ // Register binary resource template
142
+ registerResourceTemplate(server, sm);
143
+ return server;
144
+ }
145
+ function registerResourceTemplate(server, sm) {
146
+ const binaryTemplate = new ResourceTemplate('binary://{hash}', {
147
+ list: async () => ({
148
+ resources: sm.listResources(SESSION_ID).map(r => ({
149
+ uri: r.uri,
150
+ name: r.name,
151
+ description: r.description,
152
+ mimeType: r.mimeType,
153
+ size: r.size,
154
+ })),
155
+ }),
156
+ });
157
+ server.resource('binary', binaryTemplate, { description: 'Binary resources captured during browser sessions (screenshots, PDFs, downloads)' }, async (uri, _variables, _extra) => {
158
+ const resource = sm.getResource(SESSION_ID, uri.href);
159
+ if (!resource)
160
+ throw new Error(`Resource not found: ${uri.href}`);
161
+ return {
162
+ contents: [{
163
+ uri: resource.uri,
164
+ mimeType: resource.mimeType,
165
+ blob: resource.data.toString('base64'),
166
+ }],
167
+ };
168
+ });
169
+ }
170
+ async function main() {
171
+ const config = getConfig();
172
+ const reg = buildDefaultRegistry();
173
+ const networkHarEnabled = process.env.NETWORK_HAR_ENABLED !== '0';
174
+ const sm = new SessionManager({
175
+ maxSessions: config.security.maxSessions,
176
+ networkConfig: networkHarEnabled ? config.network : undefined,
177
+ });
178
+ const sessionApiKey = config.security.apiKey || undefined;
179
+ const server = createServer(reg, sm, sessionApiKey);
180
+ sm.startTTLChecker();
181
+ const transport = new StdioServerTransport();
182
+ await server.connect(transport);
183
+ }
184
+ const __filename = fileURLToPath(import.meta.url);
185
+ const isEntry = process.argv[1] === __filename || process.argv[1] === __filename.replace(/\\/g, '/');
186
+ if (isEntry) {
187
+ main().catch((err) => {
188
+ logger.error('Fatal error', { error: String(err) });
189
+ process.exit(1);
190
+ });
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type ZodTypeAny } from 'zod';
3
+ export interface PromptDef {
4
+ name: string;
5
+ title: string;
6
+ description: string;
7
+ argsSchema?: Record<string, ZodTypeAny>;
8
+ }
9
+ export declare const promptDefinitions: PromptDef[];
10
+ export declare function registerPrompts(server: McpServer): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAK,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACzC;AAsDD,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAMxC,CAAC;AAkEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CASvD"}
@@ -0,0 +1,121 @@
1
+ import { z } from 'zod';
2
+ const analyzePage = {
3
+ name: 'analyze-page',
4
+ title: 'Analyze Page',
5
+ description: 'Analyze the current page structure, metadata, and extract all useful information',
6
+ argsSchema: { depth: z.number().min(1).max(3).default(2).describe('Analysis depth: 1=basic, 2=detailed, 3=full') },
7
+ };
8
+ const scrapePage = {
9
+ name: 'scrape-page',
10
+ title: 'Scrape Page',
11
+ description: 'Extract structured content from the current page: text, tables, lists, images',
12
+ argsSchema: {
13
+ includeImages: z.boolean().default(false).describe('Include image URLs'),
14
+ includeTables: z.boolean().default(true).describe('Extract table data'),
15
+ },
16
+ };
17
+ const fillForm = {
18
+ name: 'fill-form',
19
+ title: 'Fill Form',
20
+ description: 'Find and fill form fields on the current page with provided data',
21
+ argsSchema: {
22
+ fields: z.string().describe('JSON object mapping field names/selectors to values'),
23
+ submitAfter: z.boolean().default(true).describe('Submit the form after filling'),
24
+ },
25
+ };
26
+ const bypassAuth = {
27
+ name: 'bypass-auth',
28
+ title: 'Bypass Auth',
29
+ description: 'Handle authentication and login forms automatically',
30
+ argsSchema: {
31
+ loginType: z.enum(['form', 'basic', 'oauth', 'token']).default('form').describe('Type of authentication'),
32
+ credentials: z.string().describe('JSON with username/password or token value'),
33
+ url: z.string().optional().describe('Login page URL if not current page'),
34
+ },
35
+ };
36
+ const pageStructure = {
37
+ name: 'page-structure',
38
+ title: 'Page Structure',
39
+ description: 'Analyze the DOM structure, accessibility tree, and layout of the current page',
40
+ };
41
+ export const promptDefinitions = [
42
+ analyzePage,
43
+ scrapePage,
44
+ fillForm,
45
+ bypassAuth,
46
+ pageStructure,
47
+ ];
48
+ const handlers = {
49
+ 'analyze-page': async (args) => {
50
+ const d = args.depth;
51
+ return {
52
+ description: 'Page analysis workflow',
53
+ messages: [
54
+ {
55
+ role: 'user',
56
+ content: { type: 'text', text: `Analyze the current page at depth ${d}:\n1. Extract page title and meta description\n2. List all headings (h1-h6) structure\n3. ${d >= 2 ? 'Extract all links and their types (internal/external)\n4. ' : ''}${d >= 3 ? 'Extract all data attributes, JSON-LD schemas, and Open Graph tags\n5. ' : ''}Identify the main content area and its structure` },
57
+ },
58
+ ],
59
+ };
60
+ },
61
+ 'scrape-page': async (args) => {
62
+ const includeTables = args.includeTables;
63
+ const includeImages = args.includeImages;
64
+ return {
65
+ description: 'Page scraping workflow',
66
+ messages: [
67
+ {
68
+ role: 'user',
69
+ content: { type: 'text', text: `Scrape the current page with these options:\n- Extract all visible text content\n- ${includeTables ? 'Extract all table data as structured rows' : 'Skip tables'}\n- ${includeImages ? 'Extract all image URLs and alt texts' : 'Skip images'}\n- List all links with their href and visible text\n- Detect the primary content type (article, product, listing, form, etc.)` },
70
+ },
71
+ ],
72
+ };
73
+ },
74
+ 'fill-form': async (args) => {
75
+ const fields = args.fields;
76
+ const submitAfter = args.submitAfter;
77
+ return {
78
+ description: 'Form filling workflow',
79
+ messages: [
80
+ {
81
+ role: 'user',
82
+ content: { type: 'text', text: `Fill the form on the current page:\n1. Find all form fields (input, select, textarea, button)\n2. Match fields to provided data: ${fields}\n3. Fill each field with its corresponding value\n4. ${submitAfter ? 'Click the submit button after filling' : 'Do not submit'}\n5. Return the filled field summary` },
83
+ },
84
+ ],
85
+ };
86
+ },
87
+ 'bypass-auth': async (args) => {
88
+ const loginType = args.loginType;
89
+ const credentials = args.credentials;
90
+ const url = args.url;
91
+ return {
92
+ description: 'Authentication bypass workflow',
93
+ messages: [
94
+ {
95
+ role: 'user',
96
+ content: { type: 'text', text: `Handle ${loginType} authentication:\n${url ? `1. Navigate to ${url}\n` : '1. Current page is the login page\n'}2. Detect authentication method: ${loginType}\n3. Apply credentials: ***\n4. Submit/login\n5. Verify authentication succeeded\n6. Return session/cookie status` },
97
+ },
98
+ ],
99
+ };
100
+ },
101
+ 'page-structure': async () => ({
102
+ description: 'Page structure analysis',
103
+ messages: [
104
+ {
105
+ role: 'user',
106
+ content: { type: 'text', text: 'Analyze the current page DOM structure:\n1. Document type and doctype\n2. Viewport meta tag and responsive setup\n3. Semantic HTML5 elements (header, nav, main, article, section, aside, footer)\n4. ARIA roles and accessibility attributes\n5. Iframe and embed elements\n6. Shadow DOM usage\n7. CSS framework detection (Bootstrap, Tailwind, etc.)\n8. JavaScript framework detection (React, Vue, Angular, etc.)' },
107
+ },
108
+ ],
109
+ }),
110
+ };
111
+ export function registerPrompts(server) {
112
+ for (const def of promptDefinitions) {
113
+ const handler = handlers[def.name];
114
+ server.registerPrompt(def.name, {
115
+ title: def.title,
116
+ description: def.description,
117
+ argsSchema: def.argsSchema,
118
+ }, handler);
119
+ }
120
+ }
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import type { ToolHandler } from '../../core/registry.js';
3
+ export declare const CacheStatsArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ export declare const cacheStatsHandler: ToolHandler;
5
+ export declare const ClearCacheArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ export declare const clearCacheHandler: ToolHandler;
7
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/tools/admin/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,cAAc,gDAAe,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,WAQ/B,CAAC;AAEF,eAAO,MAAM,cAAc,gDAAe,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,WAS/B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { errorResult, okResult } from '../../core/output.js';
3
+ import { ErrorCode } from '../../core/errors.js';
4
+ export const CacheStatsArgs = z.object({});
5
+ export const cacheStatsHandler = async (_args, ctx) => {
6
+ try {
7
+ const stats = ctx.cache?.stats() ?? null;
8
+ return okResult({ stats });
9
+ }
10
+ catch (err) {
11
+ const message = err instanceof Error ? err.message : String(err);
12
+ return errorResult(ErrorCode.CACHE_STATS_FAILED, message);
13
+ }
14
+ };
15
+ export const ClearCacheArgs = z.object({});
16
+ export const clearCacheHandler = async (_args, ctx) => {
17
+ try {
18
+ const before = ctx.cache?.stats() ?? { size: 0 };
19
+ ctx.cache?.clear();
20
+ return okResult({ cleared: true, removedEntries: before.size });
21
+ }
22
+ catch (err) {
23
+ const message = err instanceof Error ? err.message : String(err);
24
+ return errorResult(ErrorCode.CLEAR_CACHE_FAILED, message);
25
+ }
26
+ };
27
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/tools/admin/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAgB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;QACzC,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAgB,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolRegistry } from '../../core/registry.js';
2
+ export declare function registerAdminTools(registry: ToolRegistry): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK3D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAa/D"}
@@ -0,0 +1,9 @@
1
+ import { serverStatusHandler, ServerStatusArgs } from './server-status.js';
2
+ import { cacheStatsHandler, CacheStatsArgs } from './cache.js';
3
+ import { clearCacheHandler, ClearCacheArgs } from './cache.js';
4
+ export function registerAdminTools(registry) {
5
+ registry.register({ name: 'browser_server_status', description: 'Get server status, version, session/cache/rate-limit stats', category: 'admin', schema: ServerStatusArgs }, serverStatusHandler);
6
+ registry.register({ name: 'browser_cache_stats', description: 'Get cache statistics (hits, misses, size)', category: 'admin', schema: CacheStatsArgs }, cacheStatsHandler);
7
+ registry.register({ name: 'browser_clear_cache', description: 'Clear the entire result cache', category: 'admin', schema: ClearCacheArgs }, clearCacheHandler);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/admin/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,4DAA4D,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACzJ,mBAAmB,CACpB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,2CAA2C,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,EACpI,iBAAiB,CAClB,CAAC;IACF,QAAQ,CAAC,QAAQ,CACf,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,EACxH,iBAAiB,CAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { ToolHandler } from '../../core/registry.js';
3
+ export declare const ServerStatusArgs: z.ZodObject<{
4
+ offset: z.ZodOptional<z.ZodNumber>;
5
+ limit: z.ZodOptional<z.ZodNumber>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ offset?: number | undefined;
8
+ limit?: number | undefined;
9
+ }, {
10
+ offset?: number | undefined;
11
+ limit?: number | undefined;
12
+ }>;
13
+ export declare const serverStatusHandler: ToolHandler;
14
+ //# sourceMappingURL=server-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-status.d.ts","sourceRoot":"","sources":["../../../src/tools/admin/server-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAqBjC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ import { errorResult, okResult } from '../../core/output.js';
3
+ import { ErrorCode } from '../../core/errors.js';
4
+ import pkg from '../../../package.json' with { type: 'json' };
5
+ const SERVER_VERSION = pkg.version;
6
+ export const ServerStatusArgs = z.object({
7
+ offset: z.number().int().min(0).optional(),
8
+ limit: z.number().int().min(1).max(100).optional(),
9
+ });
10
+ export const serverStatusHandler = async (args, ctx) => {
11
+ try {
12
+ const parsed = ServerStatusArgs.safeParse(args);
13
+ if (!parsed.success)
14
+ return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
15
+ const { offset, limit } = parsed.data;
16
+ const cacheStats = ctx.cache?.stats() ?? null;
17
+ const rateLimitStats = ctx.rateLimiter?.stats() ?? null;
18
+ const sessions = ctx.sessionManager?.listSessions() ?? [];
19
+ const sessionsTotal = sessions.length;
20
+ return okResult({
21
+ version: SERVER_VERSION,
22
+ uptime: process.uptime(),
23
+ sessionsTotal,
24
+ cache: cacheStats,
25
+ rateLimiter: rateLimitStats,
26
+ });
27
+ }
28
+ catch (err) {
29
+ const message = err instanceof Error ? err.message : String(err);
30
+ return errorResult(ErrorCode.SERVER_STATUS_FAILED, message);
31
+ }
32
+ };
33
+ //# sourceMappingURL=server-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-status.js","sourceRoot":"","sources":["../../../src/tools/admin/server-status.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;AAEjD,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAgB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QACtC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;QAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;QAEtC,OAAO,QAAQ,CAAC;YACd,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,aAAa;YACb,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,cAAc;SAC5B,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,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ import type { ToolHandler } from '../../core/registry.js';
3
+ import type { Page } from 'playwright';
4
+ export declare const GetCookiesArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
5
+ export declare const getCookiesHandler: ToolHandler<Page>;
6
+ export declare const SetCookieArgs: z.ZodObject<{
7
+ name: z.ZodString;
8
+ value: z.ZodString;
9
+ url: z.ZodOptional<z.ZodString>;
10
+ domain: z.ZodOptional<z.ZodString>;
11
+ path: z.ZodOptional<z.ZodString>;
12
+ httpOnly: z.ZodOptional<z.ZodBoolean>;
13
+ secure: z.ZodOptional<z.ZodBoolean>;
14
+ sameSite: z.ZodOptional<z.ZodEnum<["Strict", "Lax", "None"]>>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ value: string;
17
+ name: string;
18
+ path?: string | undefined;
19
+ url?: string | undefined;
20
+ domain?: string | undefined;
21
+ httpOnly?: boolean | undefined;
22
+ secure?: boolean | undefined;
23
+ sameSite?: "Strict" | "Lax" | "None" | undefined;
24
+ }, {
25
+ value: string;
26
+ name: string;
27
+ path?: string | undefined;
28
+ url?: string | undefined;
29
+ domain?: string | undefined;
30
+ httpOnly?: boolean | undefined;
31
+ secure?: boolean | undefined;
32
+ sameSite?: "Strict" | "Lax" | "None" | undefined;
33
+ }>;
34
+ export declare const setCookieHandler: ToolHandler<Page>;
35
+ export declare const DeleteCookiesArgs: z.ZodObject<{
36
+ name: z.ZodString;
37
+ url: z.ZodOptional<z.ZodString>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ name: string;
40
+ url?: string | undefined;
41
+ }, {
42
+ name: string;
43
+ url?: string | undefined;
44
+ }>;
45
+ export declare const deleteCookieHandler: ToolHandler<Page>;
46
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,cAAc,gDAAe,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAS/C,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;EASxB,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAiB9C,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAWjD,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ import { validateUrl } from '../../core/sandbox.js';
3
+ import { errorResult, okResult } from '../../core/output.js';
4
+ import { ErrorCode } from '../../core/errors.js';
5
+ export const GetCookiesArgs = z.object({});
6
+ export const getCookiesHandler = async (_args, ctx) => {
7
+ try {
8
+ const page = await ctx.getPage();
9
+ const cookies = await page.context().cookies();
10
+ return okResult({ cookies, count: cookies.length });
11
+ }
12
+ catch (err) {
13
+ const message = err instanceof Error ? err.message : String(err);
14
+ return errorResult(ErrorCode.GET_COOKIES_FAILED, message);
15
+ }
16
+ };
17
+ export const SetCookieArgs = z.object({
18
+ name: z.string().min(1),
19
+ value: z.string(),
20
+ url: z.string().optional(),
21
+ domain: z.string().optional(),
22
+ path: z.string().optional(),
23
+ httpOnly: z.boolean().optional(),
24
+ secure: z.boolean().optional(),
25
+ sameSite: z.enum(['Strict', 'Lax', 'None']).optional(),
26
+ });
27
+ export const setCookieHandler = async (args, ctx) => {
28
+ const parsed = SetCookieArgs.safeParse(args);
29
+ if (!parsed.success)
30
+ return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
31
+ if (parsed.data.url) {
32
+ const urlCheck = validateUrl(parsed.data.url);
33
+ if (!urlCheck.valid) {
34
+ return errorResult(ErrorCode.URL_BLOCKED, urlCheck.error);
35
+ }
36
+ }
37
+ try {
38
+ const page = await ctx.getPage();
39
+ await page.context().addCookies([parsed.data]);
40
+ return okResult({ set: parsed.data.name });
41
+ }
42
+ catch (err) {
43
+ const message = err instanceof Error ? err.message : String(err);
44
+ return errorResult(ErrorCode.SET_COOKIE_FAILED, message);
45
+ }
46
+ };
47
+ export const DeleteCookiesArgs = z.object({
48
+ name: z.string().min(1),
49
+ url: z.string().optional(),
50
+ });
51
+ export const deleteCookieHandler = async (args, ctx) => {
52
+ const parsed = DeleteCookiesArgs.safeParse(args);
53
+ if (!parsed.success)
54
+ return errorResult(ErrorCode.INVALID_ARGS, parsed.error.message);
55
+ try {
56
+ const page = await ctx.getPage();
57
+ await page.context().clearCookies({ name: parsed.data.name, url: parsed.data.url });
58
+ return okResult({ deleted: parsed.data.name });
59
+ }
60
+ catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ return errorResult(ErrorCode.DELETE_COOKIE_FAILED, message);
63
+ }
64
+ };
65
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../../src/tools/browser/cookies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ import type { ToolHandler } from '../../core/registry.js';
3
+ import type { Page } from 'playwright';
4
+ export declare const EvaluateArgs: z.ZodObject<{
5
+ code: z.ZodString;
6
+ }, "strip", z.ZodTypeAny, {
7
+ code: string;
8
+ }, {
9
+ code: string;
10
+ }>;
11
+ export declare const evaluateHandler: ToolHandler<Page>;
12
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/tools/browser/evaluate.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;AAkBvC,eAAO,MAAM,YAAY;;;;;;EAEvB,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,IAAI,CAuC7C,CAAC"}