@saiden/browse 0.2.5

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.

Potentially problematic release.


This version of @saiden/browse might be problematic. Click here for more details.

Files changed (50) hide show
  1. package/README.md +210 -0
  2. package/dist/browser.d.ts +48 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.integration.test.d.ts +2 -0
  5. package/dist/browser.integration.test.d.ts.map +1 -0
  6. package/dist/browser.integration.test.js +173 -0
  7. package/dist/browser.integration.test.js.map +1 -0
  8. package/dist/browser.js +250 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/browser.test.d.ts +2 -0
  11. package/dist/browser.test.d.ts.map +1 -0
  12. package/dist/browser.test.js +73 -0
  13. package/dist/browser.test.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +247 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/image.d.ts +21 -0
  19. package/dist/image.d.ts.map +1 -0
  20. package/dist/image.js +131 -0
  21. package/dist/image.js.map +1 -0
  22. package/dist/index.d.ts +6 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logger.d.ts +41 -0
  27. package/dist/logger.d.ts.map +1 -0
  28. package/dist/logger.js +103 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/logger.test.d.ts +2 -0
  31. package/dist/logger.test.d.ts.map +1 -0
  32. package/dist/logger.test.js +146 -0
  33. package/dist/logger.test.js.map +1 -0
  34. package/dist/mcp.d.ts +3 -0
  35. package/dist/mcp.d.ts.map +1 -0
  36. package/dist/mcp.js +541 -0
  37. package/dist/mcp.js.map +1 -0
  38. package/dist/server.d.ts +20 -0
  39. package/dist/server.d.ts.map +1 -0
  40. package/dist/server.js +88 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/server.test.d.ts +2 -0
  43. package/dist/server.test.d.ts.map +1 -0
  44. package/dist/server.test.js +164 -0
  45. package/dist/server.test.js.map +1 -0
  46. package/dist/types.d.ts +125 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +74 -0
package/dist/server.js ADDED
@@ -0,0 +1,88 @@
1
+ import chalk from 'chalk';
2
+ import express from 'express';
3
+ import logSymbols from 'log-symbols';
4
+ import { ClaudeBrowser } from './browser.js';
5
+ import { logger, ts } from './logger.js';
6
+ function printBanner(port) {
7
+ console.log();
8
+ console.log(chalk.cyan.bold(' 🌐 Claude Browse Server'));
9
+ console.log(chalk.dim(' ─────────────────────────'));
10
+ console.log(` ${logSymbols.success} Listening on ${chalk.bold(`http://localhost:${port}`)}`);
11
+ console.log();
12
+ console.log(chalk.dim(' Commands:'));
13
+ console.log(` ${chalk.cyan('goto')} ${chalk.yellow('click')} ${chalk.magenta('type')} ${chalk.blue('query')} ${chalk.green('screenshot')}`);
14
+ console.log(` ${chalk.cyan('url')} ${chalk.blue('html')} ${chalk.yellow('back')} ${chalk.yellow('forward')} ${chalk.yellow('reload')} ${chalk.gray('wait')} ${chalk.red('close')}`);
15
+ console.log();
16
+ console.log(chalk.dim(' Example:'));
17
+ console.log(chalk.gray(` curl -X POST localhost:${port} -d '{"cmd":"goto","url":"https://example.com"}'`));
18
+ console.log();
19
+ }
20
+ export class BrowserServer {
21
+ browser;
22
+ app = express();
23
+ server = null;
24
+ port;
25
+ constructor(options = {}) {
26
+ this.browser = new ClaudeBrowser(options);
27
+ this.port = options.port ?? 13373;
28
+ this.setupMiddleware();
29
+ this.setupRoutes();
30
+ }
31
+ setupMiddleware() {
32
+ this.app.use(express.json());
33
+ this.app.use(express.text({ type: '*/*' }));
34
+ }
35
+ setupRoutes() {
36
+ this.app.post('/', (req, res) => this.handleCommand(req, res));
37
+ }
38
+ async handleCommand(req, res) {
39
+ try {
40
+ const cmd = typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
41
+ logger.command(cmd);
42
+ if (cmd.cmd === 'close') {
43
+ logger.result(cmd, { ok: true });
44
+ res.json({ ok: true });
45
+ await this.stop();
46
+ process.exit(0);
47
+ }
48
+ const result = await this.browser.executeCommand(cmd);
49
+ logger.result(cmd, result);
50
+ res.json(result);
51
+ }
52
+ catch (err) {
53
+ const error = err.message;
54
+ console.log(`${ts()} ${logSymbols.error} ${chalk.red(error)}`);
55
+ res.status(500).json({ ok: false, error });
56
+ }
57
+ }
58
+ async start() {
59
+ await this.browser.launch();
60
+ return new Promise((resolve) => {
61
+ this.server = this.app.listen(this.port, () => {
62
+ printBanner(this.port);
63
+ resolve();
64
+ });
65
+ });
66
+ }
67
+ async stop() {
68
+ console.log(chalk.dim('\n Shutting down...'));
69
+ if (this.server) {
70
+ this.server.close();
71
+ this.server = null;
72
+ }
73
+ await this.browser.close();
74
+ console.log(` ${logSymbols.success} Browser closed\n`);
75
+ }
76
+ getPort() {
77
+ return this.port;
78
+ }
79
+ getApp() {
80
+ return this.app;
81
+ }
82
+ }
83
+ export async function startServer(options = {}) {
84
+ const server = new BrowserServer(options);
85
+ await server.start();
86
+ return server;
87
+ }
88
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ import request from 'supertest';
2
+ import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest';
3
+ import { BrowserServer } from './server.js';
4
+ // Mock the browser module
5
+ vi.mock('./browser.js', () => ({
6
+ ClaudeBrowser: class MockClaudeBrowser {
7
+ async launch() { }
8
+ async close() { }
9
+ async executeCommand(cmd) {
10
+ switch (cmd.cmd) {
11
+ case 'goto':
12
+ return { ok: true, url: cmd.url, title: 'Test Page' };
13
+ case 'click':
14
+ return { ok: true, url: '/clicked' };
15
+ case 'type':
16
+ return { ok: true };
17
+ case 'query':
18
+ return { ok: true, count: 2, elements: [] };
19
+ case 'url':
20
+ return { ok: true, url: 'https://example.com', title: 'Example' };
21
+ case 'html':
22
+ return { ok: true, html: '<html></html>' };
23
+ case 'back':
24
+ return { ok: true, url: '/previous' };
25
+ case 'forward':
26
+ return { ok: true, url: '/next' };
27
+ case 'reload':
28
+ return { ok: true, url: '/current' };
29
+ case 'wait':
30
+ return { ok: true };
31
+ case 'screenshot':
32
+ return { ok: true, path: cmd.path || 'screenshot.png' };
33
+ case 'eval':
34
+ return { ok: true, result: 2 };
35
+ case 'newpage':
36
+ return { ok: true };
37
+ case 'error':
38
+ throw new Error('Test error');
39
+ default:
40
+ return { ok: true };
41
+ }
42
+ }
43
+ },
44
+ }));
45
+ describe('BrowserServer', () => {
46
+ let server;
47
+ beforeAll(async () => {
48
+ server = new BrowserServer({ port: 0 }); // Use port 0 to get random available port
49
+ });
50
+ afterAll(async () => {
51
+ await server.stop();
52
+ });
53
+ describe('constructor', () => {
54
+ it('creates server with default port', () => {
55
+ const s = new BrowserServer();
56
+ expect(s.getPort()).toBe(13373);
57
+ });
58
+ it('creates server with custom port', () => {
59
+ const s = new BrowserServer({ port: 8080 });
60
+ expect(s.getPort()).toBe(8080);
61
+ });
62
+ });
63
+ describe('POST /', () => {
64
+ it('handles goto command', async () => {
65
+ const app = server.getApp();
66
+ const res = await request(app)
67
+ .post('/')
68
+ .send({ cmd: 'goto', url: 'https://example.com' })
69
+ .expect(200);
70
+ expect(res.body.ok).toBe(true);
71
+ expect(res.body.url).toBe('https://example.com');
72
+ expect(res.body.title).toBe('Test Page');
73
+ });
74
+ it('handles click command', async () => {
75
+ const app = server.getApp();
76
+ const res = await request(app).post('/').send({ cmd: 'click', selector: '#btn' }).expect(200);
77
+ expect(res.body.ok).toBe(true);
78
+ expect(res.body.url).toBe('/clicked');
79
+ });
80
+ it('handles type command', async () => {
81
+ const app = server.getApp();
82
+ const res = await request(app)
83
+ .post('/')
84
+ .send({ cmd: 'type', selector: '#input', text: 'hello' })
85
+ .expect(200);
86
+ expect(res.body.ok).toBe(true);
87
+ });
88
+ it('handles query command', async () => {
89
+ const app = server.getApp();
90
+ const res = await request(app)
91
+ .post('/')
92
+ .send({ cmd: 'query', selector: '.items' })
93
+ .expect(200);
94
+ expect(res.body.ok).toBe(true);
95
+ expect(res.body.count).toBe(2);
96
+ });
97
+ it('handles url command', async () => {
98
+ const app = server.getApp();
99
+ const res = await request(app).post('/').send({ cmd: 'url' }).expect(200);
100
+ expect(res.body.ok).toBe(true);
101
+ expect(res.body.url).toBe('https://example.com');
102
+ });
103
+ it('handles html command', async () => {
104
+ const app = server.getApp();
105
+ const res = await request(app).post('/').send({ cmd: 'html' }).expect(200);
106
+ expect(res.body.ok).toBe(true);
107
+ expect(res.body.html).toBe('<html></html>');
108
+ });
109
+ it('handles JSON string body', async () => {
110
+ const app = server.getApp();
111
+ const res = await request(app)
112
+ .post('/')
113
+ .set('Content-Type', 'text/plain')
114
+ .send(JSON.stringify({ cmd: 'url' }))
115
+ .expect(200);
116
+ expect(res.body.ok).toBe(true);
117
+ });
118
+ it('handles back command', async () => {
119
+ const app = server.getApp();
120
+ const res = await request(app).post('/').send({ cmd: 'back' }).expect(200);
121
+ expect(res.body.ok).toBe(true);
122
+ });
123
+ it('handles forward command', async () => {
124
+ const app = server.getApp();
125
+ const res = await request(app).post('/').send({ cmd: 'forward' }).expect(200);
126
+ expect(res.body.ok).toBe(true);
127
+ });
128
+ it('handles reload command', async () => {
129
+ const app = server.getApp();
130
+ const res = await request(app).post('/').send({ cmd: 'reload' }).expect(200);
131
+ expect(res.body.ok).toBe(true);
132
+ });
133
+ it('handles wait command', async () => {
134
+ const app = server.getApp();
135
+ const res = await request(app).post('/').send({ cmd: 'wait', ms: 100 }).expect(200);
136
+ expect(res.body.ok).toBe(true);
137
+ });
138
+ it('handles screenshot command', async () => {
139
+ const app = server.getApp();
140
+ const res = await request(app)
141
+ .post('/')
142
+ .send({ cmd: 'screenshot', path: 'test.png' })
143
+ .expect(200);
144
+ expect(res.body.ok).toBe(true);
145
+ });
146
+ it('handles eval command', async () => {
147
+ const app = server.getApp();
148
+ const res = await request(app).post('/').send({ cmd: 'eval', script: '1+1' }).expect(200);
149
+ expect(res.body.ok).toBe(true);
150
+ });
151
+ it('handles newpage command', async () => {
152
+ const app = server.getApp();
153
+ const res = await request(app).post('/').send({ cmd: 'newpage' }).expect(200);
154
+ expect(res.body.ok).toBe(true);
155
+ });
156
+ it('handles errors and returns 500', async () => {
157
+ const app = server.getApp();
158
+ const res = await request(app).post('/').send({ cmd: 'error' }).expect(500);
159
+ expect(res.body.ok).toBe(false);
160
+ expect(res.body.error).toBe('Test error');
161
+ });
162
+ });
163
+ });
164
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ export interface BrowserOptions {
2
+ headless?: boolean;
3
+ width?: number;
4
+ height?: number;
5
+ }
6
+ export interface ElementInfo {
7
+ tag: string;
8
+ text: string;
9
+ attributes: Record<string, string>;
10
+ }
11
+ export interface GotoCommand {
12
+ cmd: 'goto';
13
+ url: string;
14
+ }
15
+ export interface ClickCommand {
16
+ cmd: 'click';
17
+ selector: string;
18
+ }
19
+ export interface TypeCommand {
20
+ cmd: 'type';
21
+ selector: string;
22
+ text: string;
23
+ }
24
+ export interface QueryCommand {
25
+ cmd: 'query';
26
+ selector: string;
27
+ }
28
+ export interface ScreenshotCommand {
29
+ cmd: 'screenshot';
30
+ path?: string;
31
+ fullPage?: boolean;
32
+ }
33
+ export interface UrlCommand {
34
+ cmd: 'url';
35
+ }
36
+ export interface HtmlCommand {
37
+ cmd: 'html';
38
+ full?: boolean;
39
+ }
40
+ export interface BackCommand {
41
+ cmd: 'back';
42
+ }
43
+ export interface ForwardCommand {
44
+ cmd: 'forward';
45
+ }
46
+ export interface ReloadCommand {
47
+ cmd: 'reload';
48
+ }
49
+ export interface WaitCommand {
50
+ cmd: 'wait';
51
+ ms?: number;
52
+ }
53
+ export interface NewPageCommand {
54
+ cmd: 'newpage';
55
+ }
56
+ export interface CloseCommand {
57
+ cmd: 'close';
58
+ }
59
+ export interface EvalCommand {
60
+ cmd: 'eval';
61
+ script: string;
62
+ }
63
+ export interface FaviconCommand {
64
+ cmd: 'favicon';
65
+ input: string;
66
+ outputDir: string;
67
+ }
68
+ export interface ConvertCommand {
69
+ cmd: 'convert';
70
+ input: string;
71
+ output: string;
72
+ format: 'png' | 'jpeg' | 'webp' | 'avif';
73
+ }
74
+ export interface ResizeCommand {
75
+ cmd: 'resize';
76
+ input: string;
77
+ output: string;
78
+ width: number;
79
+ height?: number;
80
+ fit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
81
+ }
82
+ export interface CropCommand {
83
+ cmd: 'crop';
84
+ input: string;
85
+ output: string;
86
+ left: number;
87
+ top: number;
88
+ width: number;
89
+ height: number;
90
+ }
91
+ export interface CompressCommand {
92
+ cmd: 'compress';
93
+ input: string;
94
+ output: string;
95
+ quality?: number;
96
+ }
97
+ export interface ThumbnailCommand {
98
+ cmd: 'thumbnail';
99
+ input: string;
100
+ output: string;
101
+ size?: 'small' | 'medium' | 'large';
102
+ }
103
+ export type BrowserCommand = GotoCommand | ClickCommand | TypeCommand | QueryCommand | ScreenshotCommand | UrlCommand | HtmlCommand | BackCommand | ForwardCommand | ReloadCommand | WaitCommand | NewPageCommand | CloseCommand | EvalCommand | FaviconCommand | ConvertCommand | ResizeCommand | CropCommand | CompressCommand | ThumbnailCommand;
104
+ export interface SuccessResponse {
105
+ ok: true;
106
+ url?: string;
107
+ title?: string;
108
+ path?: string;
109
+ html?: string;
110
+ count?: number;
111
+ elements?: ElementInfo[];
112
+ result?: unknown;
113
+ files?: string[];
114
+ outputDir?: string;
115
+ width?: number;
116
+ height?: number;
117
+ format?: string;
118
+ size?: number;
119
+ }
120
+ export interface ErrorResponse {
121
+ ok: false;
122
+ error: string;
123
+ }
124
+ export type CommandResponse = SuccessResponse | ErrorResponse;
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@saiden/browse",
3
+ "version": "0.2.5",
4
+ "description": "Headless browser automation for Claude Code using Playwright WebKit",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "claude-browse": "dist/cli.js",
10
+ "browse-mcp": "dist/mcp.js"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "start": "node dist/cli.js",
16
+ "lint": "biome lint src/",
17
+ "lint:fix": "biome lint --write src/",
18
+ "format": "biome format src/",
19
+ "format:fix": "biome format --write src/",
20
+ "check": "biome check src/",
21
+ "fix": "biome check --write src/",
22
+ "typecheck": "tsc --noEmit",
23
+ "test:unit": "vitest run --coverage --passWithNoTests",
24
+ "test:integration": "vitest run --coverage --config vitest.integration.config.ts",
25
+ "test:watch": "vitest",
26
+ "test:all": "vitest run --coverage --config vitest.all.config.ts",
27
+ "test": "npm run fix && npm run typecheck && npm run test:all && npm run build",
28
+ "coverage": "npm run test:all && open coverage/index.html",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "keywords": [
32
+ "playwright",
33
+ "webkit",
34
+ "browser",
35
+ "automation",
36
+ "claude",
37
+ "headless",
38
+ "mcp",
39
+ "model-context-protocol"
40
+ ],
41
+ "author": "aladac",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/saiden-dev/browse"
46
+ },
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "dependencies": {
51
+ "@modelcontextprotocol/sdk": "^1.26.0",
52
+ "@saiden/browse": "^0.2.4",
53
+ "chalk": "^5.6.2",
54
+ "express": "^5.2.1",
55
+ "log-symbols": "^7.0.1",
56
+ "playwright": "^1.41.0",
57
+ "sharp": "^0.34.5"
58
+ },
59
+ "devDependencies": {
60
+ "@biomejs/biome": "^1.9.0",
61
+ "@types/express": "^5.0.6",
62
+ "@types/node": "^20.11.0",
63
+ "@types/sharp": "^0.31.1",
64
+ "@types/supertest": "^6.0.3",
65
+ "@vitest/coverage-v8": "^4.0.18",
66
+ "supertest": "^7.2.2",
67
+ "typescript": "^5.3.0",
68
+ "vitest": "^4.0.18"
69
+ },
70
+ "files": [
71
+ "dist",
72
+ "README.md"
73
+ ]
74
+ }