@saiden/browse 0.2.10

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 (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 +73 -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,73 @@
1
+ {
2
+ "name": "@saiden/browse",
3
+ "version": "0.2.10",
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
+ "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
+ "chalk": "^5.6.2",
53
+ "express": "^5.2.1",
54
+ "log-symbols": "^7.0.1",
55
+ "playwright": "^1.41.0",
56
+ "sharp": "^0.34.5"
57
+ },
58
+ "devDependencies": {
59
+ "@biomejs/biome": "^1.9.0",
60
+ "@types/express": "^5.0.6",
61
+ "@types/node": "^20.11.0",
62
+ "@types/sharp": "^0.31.1",
63
+ "@types/supertest": "^6.0.3",
64
+ "@vitest/coverage-v8": "^4.0.18",
65
+ "supertest": "^7.2.2",
66
+ "typescript": "^5.3.0",
67
+ "vitest": "^4.0.18"
68
+ },
69
+ "files": [
70
+ "dist",
71
+ "README.md"
72
+ ]
73
+ }