@tom2012/cc-web 2026.5.20-a → 2026.5.24-a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/backend/dist/__tests__/browser-proxy.test.d.ts +2 -0
- package/backend/dist/__tests__/browser-proxy.test.d.ts.map +1 -0
- package/backend/dist/__tests__/browser-proxy.test.js +306 -0
- package/backend/dist/__tests__/browser-proxy.test.js.map +1 -0
- package/backend/dist/__tests__/cli-prompt-detector.test.js +31 -0
- package/backend/dist/__tests__/cli-prompt-detector.test.js.map +1 -1
- package/backend/dist/cli-prompt-detector.d.ts.map +1 -1
- package/backend/dist/cli-prompt-detector.js +23 -4
- package/backend/dist/cli-prompt-detector.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +5 -0
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/notify-service.d.ts +1 -0
- package/backend/dist/notify-service.d.ts.map +1 -1
- package/backend/dist/notify-service.js +1 -0
- package/backend/dist/notify-service.js.map +1 -1
- package/backend/dist/routes/browser-proxy.d.ts +31 -0
- package/backend/dist/routes/browser-proxy.d.ts.map +1 -0
- package/backend/dist/routes/browser-proxy.js +363 -0
- package/backend/dist/routes/browser-proxy.js.map +1 -0
- package/frontend/dist/assets/{ChatOverlay-CGyDxUxJ.js → ChatOverlay-W-pSFHsV.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-B9kooQxE.js → GraphPreview-CcuxUzQH.js} +1 -1
- package/frontend/dist/assets/{MobilePage-3uMLckd9.js → MobilePage-DEBO3i1o.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-l1O2K0sM.js → OfficePreview-DY-ew_ex.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-fZPK_FeM.js → PdfPreview-Bl0MS_5m.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-CBFQ2TQC.js → ProjectPage-tcwSSEFX.js} +5 -5
- package/frontend/dist/assets/SettingsPage-DU649aEa.js +13 -0
- package/frontend/dist/assets/{SkillHubPage-DfsO4OIa.js → SkillHubPage-hH5XcB57.js} +2 -2
- package/frontend/dist/assets/{chevron-down-C53vkdK1.js → chevron-down-B3q2CU-d.js} +1 -1
- package/frontend/dist/assets/{index-BbEFdJn-.js → index-CZOz50el.js} +1 -1
- package/frontend/dist/assets/{index-3NT40D4Y.js → index-DsYny3RQ.js} +1 -1
- package/frontend/dist/assets/{index-BnxUVJSG.js → index-nYsy3LMF.js} +3 -3
- package/frontend/dist/assets/{jszip.min-D5b8OJpG.js → jszip.min-9o6zKk8v.js} +1 -1
- package/frontend/dist/assets/{search-F_MnOHbB.js → search-B9B3Cq4V.js} +1 -1
- package/frontend/dist/assets/select-BOLkADQv.js +13 -0
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
- package/frontend/dist/assets/SettingsPage-BZ3vBlYj.js +0 -13
- package/frontend/dist/assets/select-MFyjPNJE.js +0 -13
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A self-hosted web application (distributed as npm package) that provides a browser-based interface for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI sessions. Create projects, each with a persistent terminal running Claude Code, and interact with them through a real-time terminal UI.
|
|
4
4
|
|
|
5
|
-
**Current version**: v2026.5.
|
|
5
|
+
**Current version**: v2026.5.24-a | [GitHub](https://github.com/zbc0315/cc-web) | MIT License
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-proxy.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/browser-proxy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const vitest_1 = require("vitest");
|
|
40
|
+
const express_1 = __importDefault(require("express"));
|
|
41
|
+
const http = __importStar(require("http"));
|
|
42
|
+
const jwt = __importStar(require("jsonwebtoken"));
|
|
43
|
+
const browser_proxy_1 = __importStar(require("../routes/browser-proxy"));
|
|
44
|
+
const config_1 = require("../config");
|
|
45
|
+
// Mint a valid browser-proxy session cookie using the real jwt secret —
|
|
46
|
+
// the test machine has a config.json so getConfig() works. CI without
|
|
47
|
+
// config would skip these e2e tests.
|
|
48
|
+
function mintProxyCookie() {
|
|
49
|
+
const config = (0, config_1.getConfig)();
|
|
50
|
+
const token = jwt.sign({ username: 'test', typ: 'browser-proxy' }, config.jwtSecret, { expiresIn: '1h' });
|
|
51
|
+
return `ccweb_bp=${encodeURIComponent(token)}`;
|
|
52
|
+
}
|
|
53
|
+
(0, vitest_1.describe)('parseHostport', () => {
|
|
54
|
+
(0, vitest_1.it)('接受 host:port (http only)', () => {
|
|
55
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:8080')).toEqual({ host: '127.0.0.1', port: 8080 });
|
|
56
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('localhost:3000')).toEqual({ host: 'localhost', port: 3000 });
|
|
57
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('192.168.50.247:5173')).toEqual({ host: '192.168.50.247', port: 5173 });
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('拒绝 s: 前缀 (v0 仅 http)', () => {
|
|
60
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('s:127.0.0.1:8443')).toBeNull();
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.it)('拒绝缺端口 / 非法端口 / 黑名单端口', () => {
|
|
63
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1')).toBeNull();
|
|
64
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:')).toBeNull();
|
|
65
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:0')).toBeNull();
|
|
66
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:99999')).toBeNull();
|
|
67
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:22')).toBeNull();
|
|
68
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:3389')).toBeNull();
|
|
69
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('127.0.0.1:6379')).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.it)('拒绝非法字符 (IPv6 brackets / 空格 / @ )', () => {
|
|
72
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('[::1]:8080')).toBeNull();
|
|
73
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('user@host:8080')).toBeNull();
|
|
74
|
+
(0, vitest_1.expect)((0, browser_proxy_1.parseHostport)('host with space:8080')).toBeNull();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.describe)('isAllowedProxyIp', () => {
|
|
78
|
+
(0, vitest_1.it)('IPv4 字面量 RFC1918 / loopback 放行', () => {
|
|
79
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('127.0.0.1')).toBe(true);
|
|
80
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('127.5.5.5')).toBe(true);
|
|
81
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('0.0.0.0')).toBe(true);
|
|
82
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('10.0.0.5')).toBe(true);
|
|
83
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('192.168.1.1')).toBe(true);
|
|
84
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('172.16.5.5')).toBe(true);
|
|
85
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('172.31.255.255')).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.it)('IPv4 公网 IP 拒绝', () => {
|
|
88
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('1.1.1.1')).toBe(false);
|
|
89
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('8.8.8.8')).toBe(false);
|
|
90
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('172.32.0.1')).toBe(false);
|
|
91
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('172.15.0.1')).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.it)('Cloud metadata IP 拒绝(即便是 link-local 段)', () => {
|
|
94
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('169.254.169.254')).toBe(false);
|
|
95
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('169.254.170.2')).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.it)('IPv4-mapped IPv6 不能绕过', () => {
|
|
98
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('::ffff:8.8.8.8')).toBe(false);
|
|
99
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('::ffff:127.0.0.1')).toBe(true);
|
|
100
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('::ffff:169.254.169.254')).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
(0, vitest_1.it)('IPv6 ULA / loopback 放行', () => {
|
|
103
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('::1')).toBe(true);
|
|
104
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('fc00::1')).toBe(true);
|
|
105
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('fd00::1')).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.it)('Hostname 字符串不当 IP 判断(防 10.evil.com 绕过)', () => {
|
|
108
|
+
// Pure-string hostnames must be rejected here; allowance only happens
|
|
109
|
+
// after DNS resolution in resolveAllowedTarget.
|
|
110
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('10.evil.com')).toBe(false);
|
|
111
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('192.168.evil.com')).toBe(false);
|
|
112
|
+
(0, vitest_1.expect)((0, browser_proxy_1.isAllowedProxyIp)('fc.evil.com')).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.describe)('resolveAllowedTarget', () => {
|
|
116
|
+
(0, vitest_1.it)('字面量 IP 放行返回原 IP', async () => {
|
|
117
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('127.0.0.1')).toBe('127.0.0.1');
|
|
118
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('192.168.1.1')).toBe('192.168.1.1');
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('字面量公网 IP 返回 null', async () => {
|
|
121
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('1.1.1.1')).toBeNull();
|
|
122
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('8.8.8.8')).toBeNull();
|
|
123
|
+
});
|
|
124
|
+
(0, vitest_1.it)('localhost 直接映射 127.0.0.1', async () => {
|
|
125
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('localhost')).toBe('127.0.0.1');
|
|
126
|
+
});
|
|
127
|
+
(0, vitest_1.it)('cloud metadata hostname 字面拒绝', async () => {
|
|
128
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('metadata.google.internal')).toBeNull();
|
|
129
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('metadata')).toBeNull();
|
|
130
|
+
});
|
|
131
|
+
(0, vitest_1.it)('cloud metadata IP 拒绝', async () => {
|
|
132
|
+
(0, vitest_1.expect)(await (0, browser_proxy_1.resolveAllowedTarget)('169.254.169.254')).toBeNull();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
(0, vitest_1.describe)('rewriteHtml', () => {
|
|
136
|
+
const prefix = '/api/browser-proxy/127.0.0.1:8080';
|
|
137
|
+
(0, vitest_1.it)('重写 src/href/action 的 root-absolute path', () => {
|
|
138
|
+
const input = '<script src="/main.js"></script><a href="/about">x</a><form action="/login">';
|
|
139
|
+
const out = (0, browser_proxy_1.rewriteHtml)(input, prefix);
|
|
140
|
+
(0, vitest_1.expect)(out).toContain('src="/api/browser-proxy/127.0.0.1:8080/main.js"');
|
|
141
|
+
(0, vitest_1.expect)(out).toContain('href="/api/browser-proxy/127.0.0.1:8080/about"');
|
|
142
|
+
(0, vitest_1.expect)(out).toContain('action="/api/browser-proxy/127.0.0.1:8080/login"');
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)('strip 上游 <base href> 避免覆盖代理路径', () => {
|
|
145
|
+
const input = '<head><base href="/"><base href="https://other.example/"></head><body></body>';
|
|
146
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteHtml)(input, prefix)).toBe('<head></head><body></body>');
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.it)('protocol-relative (//) 不改', () => {
|
|
149
|
+
const input = '<img src="//cdn.example.com/x.png">';
|
|
150
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteHtml)(input, prefix)).toBe(input);
|
|
151
|
+
});
|
|
152
|
+
(0, vitest_1.it)('相对路径不改', () => {
|
|
153
|
+
const input = '<img src="foo/bar.png"><a href="../other">x</a>';
|
|
154
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteHtml)(input, prefix)).toBe(input);
|
|
155
|
+
});
|
|
156
|
+
(0, vitest_1.it)('绝对 URL 不改', () => {
|
|
157
|
+
const input = '<a href="https://example.com/path">x</a>';
|
|
158
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteHtml)(input, prefix)).toBe(input);
|
|
159
|
+
});
|
|
160
|
+
(0, vitest_1.it)('单引号 attribute 也支持', () => {
|
|
161
|
+
const input = "<a href='/foo'>";
|
|
162
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteHtml)(input, prefix)).toContain("href='/api/browser-proxy/127.0.0.1:8080/foo'");
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.describe)('rewriteLocationHeader', () => {
|
|
166
|
+
const parsed = { host: '127.0.0.1', port: 8080 };
|
|
167
|
+
const prefix = '/api/browser-proxy/127.0.0.1:8080';
|
|
168
|
+
(0, vitest_1.it)('absolute redirect 同 scheme/host/port → 重写为 proxy URL', () => {
|
|
169
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('http://127.0.0.1:8080/new-path?x=1', parsed, prefix))
|
|
170
|
+
.toBe('/api/browser-proxy/127.0.0.1:8080/new-path?x=1');
|
|
171
|
+
});
|
|
172
|
+
(0, vitest_1.it)('absolute redirect 不同 scheme → 原样保留(防协议混淆)', () => {
|
|
173
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('https://127.0.0.1:8080/foo', parsed, prefix))
|
|
174
|
+
.toBe('https://127.0.0.1:8080/foo');
|
|
175
|
+
});
|
|
176
|
+
(0, vitest_1.it)('absolute redirect 不同 host → 原样保留', () => {
|
|
177
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('http://other.example/foo', parsed, prefix))
|
|
178
|
+
.toBe('http://other.example/foo');
|
|
179
|
+
});
|
|
180
|
+
(0, vitest_1.it)('root-relative redirect → 加前缀', () => {
|
|
181
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('/foo?x=1', parsed, prefix))
|
|
182
|
+
.toBe('/api/browser-proxy/127.0.0.1:8080/foo?x=1');
|
|
183
|
+
});
|
|
184
|
+
(0, vitest_1.it)('protocol-relative (//) → 不改', () => {
|
|
185
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('//cdn.example/x', parsed, prefix))
|
|
186
|
+
.toBe('//cdn.example/x');
|
|
187
|
+
});
|
|
188
|
+
(0, vitest_1.it)('纯相对路径 → 不改', () => {
|
|
189
|
+
(0, vitest_1.expect)((0, browser_proxy_1.rewriteLocationHeader)('foo/bar', parsed, prefix))
|
|
190
|
+
.toBe('foo/bar');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
(0, vitest_1.describe)('e2e: browser-proxy router 跑通本地 dummy server', () => {
|
|
194
|
+
let upstream;
|
|
195
|
+
let upstreamPort = 0;
|
|
196
|
+
let proxy;
|
|
197
|
+
let proxyPort = 0;
|
|
198
|
+
(0, vitest_1.beforeAll)(async () => {
|
|
199
|
+
upstream = http.createServer((req, res) => {
|
|
200
|
+
if (req.url === '/index.html') {
|
|
201
|
+
res.writeHead(200, {
|
|
202
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
203
|
+
'X-Frame-Options': 'DENY',
|
|
204
|
+
'Content-Security-Policy': "frame-ancestors 'none'",
|
|
205
|
+
'Clear-Site-Data': '"cookies"',
|
|
206
|
+
});
|
|
207
|
+
res.end('<!doctype html><base href="/"><body><a href="/about">x</a><script src="/m.js"></script></body>');
|
|
208
|
+
}
|
|
209
|
+
else if (req.url === '/m.js') {
|
|
210
|
+
res.writeHead(200, { 'Content-Type': 'application/javascript' });
|
|
211
|
+
res.end('console.log(1);');
|
|
212
|
+
}
|
|
213
|
+
else if (req.url === '/redir') {
|
|
214
|
+
res.writeHead(302, { 'Location': '/landed' });
|
|
215
|
+
res.end();
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
res.writeHead(404);
|
|
219
|
+
res.end('nope');
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
await new Promise((resolve) => upstream.listen(0, '127.0.0.1', resolve));
|
|
223
|
+
upstreamPort = upstream.address().port;
|
|
224
|
+
const app = (0, express_1.default)();
|
|
225
|
+
// Router handles its own auth (cookie-only); no middleware needed.
|
|
226
|
+
app.use('/api/browser-proxy', browser_proxy_1.default);
|
|
227
|
+
proxy = http.createServer(app);
|
|
228
|
+
await new Promise((resolve) => proxy.listen(0, '127.0.0.1', resolve));
|
|
229
|
+
proxyPort = proxy.address().port;
|
|
230
|
+
});
|
|
231
|
+
(0, vitest_1.afterAll)(async () => {
|
|
232
|
+
await new Promise((resolve) => upstream.close(() => resolve()));
|
|
233
|
+
await new Promise((resolve) => proxy.close(() => resolve()));
|
|
234
|
+
});
|
|
235
|
+
const withCookie = (path, init) => fetch(`http://127.0.0.1:${proxyPort}${path}`, { ...(init ?? {}), headers: { ...(init?.headers ?? {}), Cookie: mintProxyCookie() } });
|
|
236
|
+
(0, vitest_1.it)('无 cookie → 403 (session required)', async () => {
|
|
237
|
+
const r = await fetch(`http://127.0.0.1:${proxyPort}/api/browser-proxy/127.0.0.1:${upstreamPort}/index.html`);
|
|
238
|
+
(0, vitest_1.expect)(r.status).toBe(403);
|
|
239
|
+
});
|
|
240
|
+
(0, vitest_1.it)('伪造的 cookie (错 typ 或错 secret) → 403', async () => {
|
|
241
|
+
const config = (0, config_1.getConfig)();
|
|
242
|
+
const wrongTyp = jwt.sign({ username: 'x', typ: 'user' }, config.jwtSecret, { expiresIn: '1h' });
|
|
243
|
+
const r1 = await fetch(`http://127.0.0.1:${proxyPort}/api/browser-proxy/127.0.0.1:${upstreamPort}/index.html`, {
|
|
244
|
+
headers: { Cookie: `ccweb_bp=${encodeURIComponent(wrongTyp)}` },
|
|
245
|
+
});
|
|
246
|
+
(0, vitest_1.expect)(r1.status).toBe(403);
|
|
247
|
+
const wrongSecret = jwt.sign({ username: 'x', typ: 'browser-proxy' }, 'not-the-secret', { expiresIn: '1h' });
|
|
248
|
+
const r2 = await fetch(`http://127.0.0.1:${proxyPort}/api/browser-proxy/127.0.0.1:${upstreamPort}/index.html`, {
|
|
249
|
+
headers: { Cookie: `ccweb_bp=${encodeURIComponent(wrongSecret)}` },
|
|
250
|
+
});
|
|
251
|
+
(0, vitest_1.expect)(r2.status).toBe(403);
|
|
252
|
+
});
|
|
253
|
+
(0, vitest_1.it)('代理 HTML:strip X-Frame / CSP / Clear-Site-Data + rewrite path + 注入 CSP sandbox', async () => {
|
|
254
|
+
const r = await withCookie(`/api/browser-proxy/127.0.0.1:${upstreamPort}/index.html`);
|
|
255
|
+
(0, vitest_1.expect)(r.status).toBe(200);
|
|
256
|
+
(0, vitest_1.expect)(r.headers.get('x-frame-options')).toBeNull();
|
|
257
|
+
(0, vitest_1.expect)(r.headers.get('content-security-policy')).toContain('sandbox');
|
|
258
|
+
(0, vitest_1.expect)(r.headers.get('content-security-policy')).not.toContain('allow-same-origin');
|
|
259
|
+
(0, vitest_1.expect)(r.headers.get('content-security-policy')).not.toContain('allow-popups-to-escape-sandbox');
|
|
260
|
+
(0, vitest_1.expect)(r.headers.get('clear-site-data')).toBeNull();
|
|
261
|
+
const body = await r.text();
|
|
262
|
+
(0, vitest_1.expect)(body).toContain(`href="/api/browser-proxy/127.0.0.1:${upstreamPort}/about"`);
|
|
263
|
+
(0, vitest_1.expect)(body).toContain(`src="/api/browser-proxy/127.0.0.1:${upstreamPort}/m.js"`);
|
|
264
|
+
(0, vitest_1.expect)(body).not.toContain('<base');
|
|
265
|
+
});
|
|
266
|
+
(0, vitest_1.it)('代理 JS:原样透传不重写', async () => {
|
|
267
|
+
const r = await withCookie(`/api/browser-proxy/127.0.0.1:${upstreamPort}/m.js`);
|
|
268
|
+
(0, vitest_1.expect)(r.status).toBe(200);
|
|
269
|
+
(0, vitest_1.expect)(await r.text()).toBe('console.log(1);');
|
|
270
|
+
});
|
|
271
|
+
(0, vitest_1.it)('代理 redirect:root-relative Location 加前缀', async () => {
|
|
272
|
+
const r = await withCookie(`/api/browser-proxy/127.0.0.1:${upstreamPort}/redir`, { redirect: 'manual' });
|
|
273
|
+
(0, vitest_1.expect)(r.status).toBe(302);
|
|
274
|
+
(0, vitest_1.expect)(r.headers.get('location')).toBe(`/api/browser-proxy/127.0.0.1:${upstreamPort}/landed`);
|
|
275
|
+
});
|
|
276
|
+
(0, vitest_1.it)('拒绝公网字面量 IP (403)', async () => {
|
|
277
|
+
const r = await withCookie('/api/browser-proxy/1.1.1.1:80/');
|
|
278
|
+
(0, vitest_1.expect)(r.status).toBe(403);
|
|
279
|
+
});
|
|
280
|
+
(0, vitest_1.it)('拒绝 cloud metadata IP (403)', async () => {
|
|
281
|
+
const r = await withCookie('/api/browser-proxy/169.254.169.254:80/');
|
|
282
|
+
(0, vitest_1.expect)(r.status).toBe(403);
|
|
283
|
+
});
|
|
284
|
+
(0, vitest_1.it)('拒绝非法 hostport (400)', async () => {
|
|
285
|
+
const r = await withCookie('/api/browser-proxy/not-a-host');
|
|
286
|
+
(0, vitest_1.expect)(r.status).toBe(400);
|
|
287
|
+
});
|
|
288
|
+
(0, vitest_1.it)('拒绝黑名单端口 (400)', async () => {
|
|
289
|
+
const r = await withCookie('/api/browser-proxy/127.0.0.1:22/');
|
|
290
|
+
(0, vitest_1.expect)(r.status).toBe(400);
|
|
291
|
+
});
|
|
292
|
+
(0, vitest_1.it)('_session 无 Bearer token → 401', async () => {
|
|
293
|
+
const r = await fetch(`http://127.0.0.1:${proxyPort}/api/browser-proxy/_session`, { method: 'POST' });
|
|
294
|
+
(0, vitest_1.expect)(r.status).toBe(401);
|
|
295
|
+
});
|
|
296
|
+
(0, vitest_1.it)('_session 非 admin Bearer → 403', async () => {
|
|
297
|
+
const config = (0, config_1.getConfig)();
|
|
298
|
+
const userToken = jwt.sign({ username: 'definitely-not-admin', typ: 'user' }, config.jwtSecret, { expiresIn: '1h' });
|
|
299
|
+
const r = await fetch(`http://127.0.0.1:${proxyPort}/api/browser-proxy/_session`, {
|
|
300
|
+
method: 'POST',
|
|
301
|
+
headers: { Authorization: `Bearer ${userToken}` },
|
|
302
|
+
});
|
|
303
|
+
(0, vitest_1.expect)(r.status).toBe(403);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
//# sourceMappingURL=browser-proxy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-proxy.test.js","sourceRoot":"","sources":["../../src/__tests__/browser-proxy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,37 @@ const FULL_MENU = [
|
|
|
85
85
|
(0, vitest_1.expect)(detected[0].options).toHaveLength(3);
|
|
86
86
|
}
|
|
87
87
|
});
|
|
88
|
+
(0, vitest_1.it)('v-20-b 根因:Ink TUI 用 CHA `\\x1b[<n>G` 替代字面空格,正确还原', () => {
|
|
89
|
+
const { events } = collect();
|
|
90
|
+
// Real Ink TUI output captured from Claude CLI 2.1.144 PTY (see investigation notes).
|
|
91
|
+
// 每个单词间用 CHA 序列定位列号,没有任何字面空格字符 —— 旧 stripAnsi 会得到
|
|
92
|
+
// "Resumefromsummary" 永远匹配不到 fingerprint。
|
|
93
|
+
const inkReal = '\x1b[3G\x1b[38;2;87;105;247m❯\x1b[5G\x1b[38;2;102;102;102m1.\x1b[8G' +
|
|
94
|
+
'\x1b[38;2;87;105;247mResume\x1b[15Gfrom\x1b[20Gsummary\x1b[28G(recommended)\x1b[39m\r\r\n' +
|
|
95
|
+
'\x1b[5G\x1b[38;2;102;102;102m2.\x1b[8G\x1b[39mResume\x1b[15Gfull\x1b[20Gsession\x1b[28Gas-is\r\r\n' +
|
|
96
|
+
"\x1b[5G\x1b[38;2;102;102;102m3.\x1b[8G\x1b[39mDon't\x1b[14Gask\x1b[18Gme\x1b[21Gagain\r\r\n";
|
|
97
|
+
cli_prompt_detector_1.cliPromptDetector.feed('p_ink', inkReal);
|
|
98
|
+
const detected = events.filter((e) => e.projectId === 'p_ink' && e.type === 'cli_prompt_detected');
|
|
99
|
+
(0, vitest_1.expect)(detected).toHaveLength(1);
|
|
100
|
+
if (detected[0]?.type === 'cli_prompt_detected') {
|
|
101
|
+
(0, vitest_1.expect)(detected[0].options).toEqual([
|
|
102
|
+
{ digit: 1, label: 'Resume from summary', recommended: true },
|
|
103
|
+
{ digit: 2, label: 'Resume full session as-is', recommended: false },
|
|
104
|
+
{ digit: 3, label: "Don't ask me again", recommended: false },
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
cli_prompt_detector_1.cliPromptDetector.reset('p_ink');
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.it)('CUF `\\x1b[<n>C` 替换为 n 个空格', () => {
|
|
110
|
+
const { events } = collect();
|
|
111
|
+
// Hypothetical CLI using CUF instead of CHA to advance the cursor.
|
|
112
|
+
// The detector should still see well-spaced text after strip.
|
|
113
|
+
const cuf = "Resume\x1b[1Cfrom\x1b[1Csummary\nResume\x1b[1Cfull\x1b[1Csession\n 1. Resume from summary\n 2. Resume full session\n 3. Don't ask me again";
|
|
114
|
+
cli_prompt_detector_1.cliPromptDetector.feed('p_cuf', cuf);
|
|
115
|
+
const detected = events.filter((e) => e.projectId === 'p_cuf' && e.type === 'cli_prompt_detected');
|
|
116
|
+
(0, vitest_1.expect)(detected.length).toBeGreaterThanOrEqual(1);
|
|
117
|
+
cli_prompt_detector_1.cliPromptDetector.reset('p_cuf');
|
|
118
|
+
});
|
|
88
119
|
(0, vitest_1.it)('已 detected 状态下 options 未变 → 不重复 emit(debounced)', () => {
|
|
89
120
|
const { events } = collect();
|
|
90
121
|
cli_prompt_detector_1.cliPromptDetector.feed('p_idem', FULL_MENU);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-prompt-detector.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-prompt-detector.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-prompt-detector.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-prompt-detector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-prompt-detector.d.ts","sourceRoot":"","sources":["../src/cli-prompt-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"cli-prompt-detector.d.ts","sourceRoot":"","sources":["../src/cli-prompt-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;CACtB;AAwDD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAmB9D;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAOD,cAAM,iBAAkB,SAAQ,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAE1D;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAmE1C,6EAA6E;IAC7E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAY9B;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIhD,OAAO,CAAC,gBAAgB;CAMzB;AAYD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -48,13 +48,32 @@ const FINGERPRINTS = [
|
|
|
48
48
|
},
|
|
49
49
|
];
|
|
50
50
|
/**
|
|
51
|
-
* Strip ANSI CSI sequences
|
|
52
|
-
*
|
|
53
|
-
*
|
|
51
|
+
* Strip ANSI CSI sequences down to plain text that fingerprint phrases can be
|
|
52
|
+
* matched against.
|
|
53
|
+
*
|
|
54
|
+
* v-20-b root-cause fix: Ink TUI (used by Claude CLI) lays out text via
|
|
55
|
+
* column-positioning escapes (CHA = `\x1b[<n>G`, CUF = `\x1b[<n>C`) instead of
|
|
56
|
+
* literal whitespace, so "Resume from summary" arrives on the PTY as
|
|
57
|
+
* `Resume\x1b[15Gfrom\x1b[20Gsummary`. The previous strip dropped CHA/CUF
|
|
58
|
+
* outright, collapsing the line to "Resumefromsummary" and making the
|
|
59
|
+
* fingerprint phrases impossible to match. We now replace those two cursor-
|
|
60
|
+
* advance escapes with a single space — that's enough whitespace for fingerprint
|
|
61
|
+
* phrases and the digit-label option regex to find their normal-looking text,
|
|
62
|
+
* without trying to reconstruct exact column alignment (which we don't need).
|
|
63
|
+
*
|
|
64
|
+
* Order matters: CHA / CUF must be handled BEFORE the generic CSI sweep,
|
|
65
|
+
* otherwise the generic regex eats them first and the replacement never runs.
|
|
54
66
|
*/
|
|
55
67
|
function stripAnsi(s) {
|
|
56
68
|
// eslint-disable-next-line no-control-regex
|
|
57
|
-
return s
|
|
69
|
+
return s
|
|
70
|
+
.replace(/\x1b\[\d*G/g, ' ')
|
|
71
|
+
.replace(/\x1b\[(\d*)C/g, (_m, n) => {
|
|
72
|
+
const count = Number(n || 1);
|
|
73
|
+
return ' '.repeat(Number.isFinite(count) && count > 0 && count <= 200 ? count : 1);
|
|
74
|
+
})
|
|
75
|
+
.replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g, '')
|
|
76
|
+
.replace(/\x1b\][^\x07]*\x07/g, '');
|
|
58
77
|
}
|
|
59
78
|
/**
|
|
60
79
|
* Parse menu options out of the ANSI-stripped buffer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-prompt-detector.js","sourceRoot":"","sources":["../src/cli-prompt-detector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;
|
|
1
|
+
{"version":3,"file":"cli-prompt-detector.js","sourceRoot":"","sources":["../src/cli-prompt-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwFA,QAAA,MAAM,GAAG,6CAAY,CAAC;AA40BtB,eAAe,GAAG,CAAC"}
|
package/backend/dist/index.js
CHANGED
|
@@ -81,6 +81,7 @@ const plugin_manager_1 = require("./plugin-manager");
|
|
|
81
81
|
const plugins_1 = __importDefault(require("./routes/plugins"));
|
|
82
82
|
const plugin_bridge_1 = __importDefault(require("./routes/plugin-bridge"));
|
|
83
83
|
const sync_1 = __importDefault(require("./routes/sync"));
|
|
84
|
+
const browser_proxy_1 = __importDefault(require("./routes/browser-proxy"));
|
|
84
85
|
const sync_scheduler_1 = require("./sync-scheduler");
|
|
85
86
|
const chat_backup_1 = require("./chat-backup");
|
|
86
87
|
const sync_service_1 = require("./sync-service");
|
|
@@ -224,6 +225,10 @@ app.use('/api/tool', auth_1.authMiddleware, claude_1.default);
|
|
|
224
225
|
app.use('/api/plugins', auth_1.authMiddleware, plugins_1.default);
|
|
225
226
|
app.use('/api/plugin-bridge', auth_1.authMiddleware, plugin_bridge_1.default);
|
|
226
227
|
app.use('/api/sync', auth_1.authMiddleware, sync_1.default);
|
|
228
|
+
// NOT wrapped in authMiddleware — browser-proxy.ts handles its own
|
|
229
|
+
// auth (explicit Bearer admin for /_session, cookie for proxy GETs) so
|
|
230
|
+
// localhost auto-auth cannot blind-trigger SSRF via CSRF.
|
|
231
|
+
app.use('/api/browser-proxy', browser_proxy_1.default);
|
|
227
232
|
// Serve plugin SDK: /plugin-sdk/ccweb-plugin-sdk.js
|
|
228
233
|
app.use('/plugin-sdk', express_1.default.static(path.join(__dirname, '../../plugin-sdk')));
|
|
229
234
|
// Serve plugin frontend files: /plugins/:id/* → ~/.ccweb/plugins/:id/frontend/*
|