2026-05-20 21:39:12 +08:00

98 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Geo 账号与代理模块
created: 2026-05-07
updated: 2026-05-07
type: entity
tags: [module, backend, frontend, database]
sources: [packages/backend/src/modules/geo/, packages/frontend/src/modules/geo/, docs/superpowers/specs/2026-05-03-geo-master-roadmap.md, docs/superpowers/specs/2026-05-03-geo-s1-infrastructure-design.md]
---
# Geo 账号与代理模块
Geo 模块是 2026-05-07 新增的账号、代理 IP 与浏览器 profile 绑定基础设施,服务养号、电商自动化和后续 Agent 操作账号矩阵。它和 [[netabrowser-runtime]] 协作Geo 负责账号/IP/登录态数据,浏览器 daemon 负责真正打开带指纹、代理和持久 profile 的 Chromium。
## 目录结构
```text
packages/backend/src/modules/geo/
├── config.ts
├── controller/admin/account.ts
├── controller/admin/proxy_ip.ts
├── entity/account.ts
├── entity/proxy_ip.ts
├── provider/proxy/
│ ├── interface.ts
│ ├── local.ts
│ └── tianqi.ts
└── service/
├── account.ts
├── encrypt.ts
└── proxy_ip.ts
```
前端入口在 `packages/frontend/src/modules/geo/`,包含 `accounts.vue``proxies.vue``dashboard.vue`
## 数据模型
| 表 | Entity | 职责 |
| --- | --- | --- |
| `geo_account` | `entity/account.ts` | 平台账号、登录态、sessionName、fingerprintSeed、cookie、绑定 Agent 和绑定 IP |
| `geo_proxy_ip` | `entity/proxy_ip.ts` | 本地/第三方代理、协议、区域、城市、出口 IP、套餐、健康状态和账号 1:1 绑定 |
关键约束:
- `geo_account.sessionName` 唯一,对应 [[netabrowser-runtime]] 的浏览器 profile。
- `geo_account.fingerprintSeed` 让同一账号每次启动保持稳定指纹,不同账号表现为不同物理设备。
- `geo_proxy_ip.bindAccountId``geo_account.proxyId` 形成强 1:1 绑定。
- 切换 IP 或重置账号会生成新的 `sessionName``fingerprintSeed`,清空 cookie并尝试删除旧 profile。
## 账号流程
`GeoAccountService` 的主路径:
```text
add()
-> 创建账号
-> 生成 sessionName / fingerprintSeed
-> 可选绑定 proxy
launch()
-> 根据账号和 IP 构造 daemon open 参数
-> 调用 /admin/browser-daemon/open
-> 如果同名 session 已存在则 goto 复用
-> fresh profile 时可注入数据库 cookie
captureCookies()
-> 调用 browser-daemon cookie-list
-> 写入 cookies/cookieCapturedAt/cookieExpiresAt/loginStatus
-> 尝试从 cookie 或 DOM 提取 loginAccount
```
这些流程说明 Geo 不是简单 CRUD而是账号状态机、IP 绑定和浏览器 profile 生命周期的协调层。
## 代理 Provider
`provider/proxy/` 当前提供:
- `local`:本地直连模式。
- `tianqi`:第三方代理 Provider 骨架。
- `interface.ts`:统一 Provider 接口。
`GeoProxyIpService` 负责把数据库记录转换为浏览器 daemon 可消费的 proxy 信息SOCKS5 用户名密码的 Chromium 兼容问题由 [[netabrowser-runtime]] 的本地 HTTP 桥处理。
## 前端入口
Geo 前端在 `packages/frontend/src/modules/geo/config.ts` 注册独立模块入口,当前页面分为:
- 账号页:新增账号、选择平台、绑定 Agent/IP、启动浏览器、抓取 cookie、重置会话、切换 IP。
- 代理页:管理本地/第三方代理、查看状态、绑定关系和健康信息。
- Dashboard当前为轻量入口后续可承接账号矩阵概览。
## 相关页面
- [[project-overview]]
- [[netabrowser-runtime]]
- [[database-entity-overview]]
- [[frontend-architecture]]
- [[cool-admin-framework]]