cdp-tunnel 3.4.0 → 3.6.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.
- package/extension-new/cdp/handler/special.js +12 -2
- package/extension-new/config-page-preview.html +5 -0
- package/extension-new/config-page.js +15 -4
- package/extension-new/core/connection-state.js +9 -0
- package/extension-new/core/websocket.js +8 -3
- package/extension-new/manifest.json +1 -1
- package/extension-new/utils/config.js +1 -1
- package/extension-new/utils/helpers.js +9 -3
- package/package.json +1 -1
- package/server/admin-console.html +481 -0
- package/server/modules/config.js +5 -0
- package/server/modules/port-pool.js +144 -21
- package/server/proxy-server.js +323 -4
- package/server/saas/auth.js +1 -1
- package/server/saas/key-manager.js +98 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* API Key 管理工具(手动创建/列出/删除 key)
|
|
6
|
+
*
|
|
7
|
+
* 一 key = 一浏览器。创建后把带 key 的地址给用户填进扩展。
|
|
8
|
+
*
|
|
9
|
+
* 用法:
|
|
10
|
+
* node server/saas/key-manager.js create [name] 创建 key
|
|
11
|
+
* node server/saas/key-manager.js list 列出所有 key
|
|
12
|
+
* node server/saas/key-manager.js revoke <keyId> 吊销 key
|
|
13
|
+
*
|
|
14
|
+
* 创建后会输出一个地址,格式:
|
|
15
|
+
* ws://localhost:9221/plugin?key=ak_xxxxxxxx
|
|
16
|
+
* 上云后把 localhost 换成云域名。
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const auth = require('./auth');
|
|
20
|
+
|
|
21
|
+
const command = process.argv[2];
|
|
22
|
+
const arg = process.argv[3];
|
|
23
|
+
|
|
24
|
+
// 用来管理 key 的内置用户(绕过注册系统)
|
|
25
|
+
const BUILTIN_USER = { id: 'builtin-admin', email: 'admin@local', displayName: 'Admin' };
|
|
26
|
+
|
|
27
|
+
function ensureBuiltinUser() {
|
|
28
|
+
const db = require('./db');
|
|
29
|
+
const existing = db.prepare('SELECT id FROM users WHERE id = ?').get(BUILTIN_USER.id);
|
|
30
|
+
if (!existing) {
|
|
31
|
+
db.prepare('INSERT INTO users (id, email, password_hash, display_name) VALUES (?, ?, ?, ?)')
|
|
32
|
+
.run(BUILTIN_USER.id, BUILTIN_USER.email, 'builtin-no-login', BUILTIN_USER.displayName);
|
|
33
|
+
}
|
|
34
|
+
return BUILTIN_USER;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function main() {
|
|
38
|
+
try {
|
|
39
|
+
if (command === 'create' || !command) {
|
|
40
|
+
ensureBuiltinUser();
|
|
41
|
+
const name = arg || ('browser-' + Date.now().toString(36));
|
|
42
|
+
const keyInfo = auth.createApiKey(BUILTIN_USER.id, name);
|
|
43
|
+
const port = process.env.PORT || 9221;
|
|
44
|
+
const host = process.env.EXTERNAL_HOST || `localhost:${port}`;
|
|
45
|
+
console.log('\n✅ Key 创建成功\n');
|
|
46
|
+
console.log(` Key ID: ${keyInfo.keyId}`);
|
|
47
|
+
console.log(` 名称: ${name}`);
|
|
48
|
+
console.log(` Key: ${keyInfo.key}`);
|
|
49
|
+
console.log(`\n 扩展连接地址(填进扩展配置页):`);
|
|
50
|
+
console.log(` \x1b[32mws://${host}/plugin?key=${keyInfo.key}\x1b[0m`);
|
|
51
|
+
console.log(`\n CDP 客户端连接地址:`);
|
|
52
|
+
console.log(` \x1b[32mws://${host}/client?key=${keyInfo.key}\x1b[0m`);
|
|
53
|
+
console.log('');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (command === 'list') {
|
|
58
|
+
ensureBuiltinUser();
|
|
59
|
+
const keys = auth.listApiKeys(BUILTIN_USER.id);
|
|
60
|
+
if (keys.length === 0) {
|
|
61
|
+
console.log('\n(没有 key,用 create 创建)\n');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
console.log('\n=== API Keys ===\n');
|
|
65
|
+
keys.forEach(k => {
|
|
66
|
+
const status = k.active ? '✅' : '❌';
|
|
67
|
+
const lastUsed = k.last_used_at ? k.last_used_at : '从未';
|
|
68
|
+
console.log(` ${status} ${k.name}`);
|
|
69
|
+
console.log(` ID: ${k.id}`);
|
|
70
|
+
console.log(` 最后使用: ${lastUsed}`);
|
|
71
|
+
console.log(` 创建: ${k.created_at}`);
|
|
72
|
+
console.log('');
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (command === 'revoke') {
|
|
78
|
+
if (!arg) {
|
|
79
|
+
console.log('用法: node key-manager.js revoke <keyId>');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
ensureBuiltinUser();
|
|
83
|
+
auth.revokeApiKey(arg, BUILTIN_USER.id);
|
|
84
|
+
console.log(`\n✅ Key ${arg} 已吊销\n`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log('用法:');
|
|
89
|
+
console.log(' node server/saas/key-manager.js create [name] 创建 key');
|
|
90
|
+
console.log(' node server/saas/key-manager.js list 列出所有 key');
|
|
91
|
+
console.log(' node server/saas/key-manager.js revoke <keyId> 吊销 key');
|
|
92
|
+
} catch (e) {
|
|
93
|
+
console.error('错误:', e.message);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
main();
|