Files
FlowPilot/docs/多注册流程架构边界.md
T
2026-05-21 07:21:34 +08:00

125 lines
6.2 KiB
Markdown
Raw 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.
# 多注册流程架构边界
本文记录后续从“OpenAI 注册扩展”升级到“多注册流程扩展”时的模块边界。当前结论是:需要引入多 flow 架构,但不要把所有能力都提前抽成通用服务。
## 1. 总体判断
后续新增注册项目时,不应继续在现有 OpenAI 步骤里堆 `if site === ...`。不同网站的注册入口、验证码、资料页、风控页、回调页和成功判定都可能完全不同,应按独立 flow 处理。
目标形态:
```txt
core/
flow-registry
workflow-engine
runtime-state
tab-runtime
logging
account-artifacts
email
mail-code-polling
network-proxy
flows/
openai/
workflow.js
content-driver.js
mail-rules.js
network-profile.js
phone-verification-flow.js
phone-sms-providers/
site-a/
workflow.js
content-driver.js
mail-rules.js
network-profile.js
```
第一阶段不需要立刻调整成上述目录,只需要按这个边界重构,避免新增项目继续污染 OpenAI 专用逻辑。
## 2. 必须通用化的部分
- `activeFlowId / runId / nodeId` 状态模型:替代只适合单流程的 `currentStep / stepStatuses`,同时避免与现有外部接口里的远端 `flow_id` 语义冲突。
- Workflow engine:负责节点执行、跳转、停止、恢复、重试和超时,不理解具体网站页面。
- Flow registry:负责注册 OpenAI、后续网站 A、网站 B 等独立流程。
- Tab runtime:标签页注册、自动化窗口锁定、脚本注入、消息超时、页面 ready 检查。
- Logging / status:结构化日志、节点状态、运行进度、停止和失败展示。
- Account artifact store:记录账号产物、身份、凭据、回调结果和失败信息。
- Email identity:邮箱生成、邮箱池、别名、转发收件目标等身份能力。
- Mail polling:邮件验证码、magic link、激活链接的轮询框架;具体过滤和提取规则由 flow 提供。
- IP proxy / network policy:代理应用、切换、出口检测、防泄漏;目标域名和探测 URL 由 flow 提供。
- Sidepanel dynamic renderer:按 flow capability 显示配置区、步骤列表和运行状态。
- Settings schema:通用配置与 flow 私有配置分层导入导出。
- Error taxonomy / recovery policy:通用层只处理执行框架错误,业务错误由 flow 自己分类。
## 3. 暂不通用化的部分
以下能力当前只属于 OpenAI flow,不进入 core
- 手机接码:HeroSMS / 5sim / NexSMS、取号、复用、轮询、换号、释放、手机号注册和后置 add-phone。
- LuckMail:当前 `project_code = openai` 的购邮、复用、已用/保留/禁用管理。
- OpenAI / ChatGPT 页面 DOM 操作。
- OpenAI OAuth 授权、localhost callback、CPA / SUB2API / Codex2API 绑定。
- ChatGPT Plus、PayPal、GoPay、GPC 相关支付流程。
- OpenAI 的验证码邮件过滤规则、登录状态判断、add-phone fatal 判断。
- OpenAI 专属账号产物字段,如 Plus checkout、OAuth state、平台验证字段。
原因:当前除了 OpenAI,新项目暂不需要手机接码。过早把接码抽成通用服务会让新 flow 被迫理解手机号订单、短信平台、号码复用和页面 resend 细节,增加维护成本。
## 4. 手机接码边界
手机接码先保持为 OpenAI 专属能力。
当前这些模块在逻辑上归属 `flows/openai`,即使物理路径暂时还在旧目录:
- `background/phone-verification-flow.js`
- `phone-sms/providers/hero-sms.js`
- `phone-sms/providers/five-sim.js`
- `phone-sms/providers/registry.js`
- `flows/openai/content/phone-auth.js`
- `flows/openai/content/phone-country-utils.js`
- sidepanel 中的接码配置区
- 相关测试:`tests/phone-verification-flow.test.js``tests/five-sim-provider.test.js``tests/sidepanel-phone-verification-settings.test.js`
后续新增 flow 默认 `sms: false`,不显示接码配置,不加载接码步骤,也不要求 workflow engine 理解短信订单。
如果未来第二个真实 flow 也需要接码,再按事实抽象,优先抽 provider API,而不是直接抽完整手机号验证编排:
```js
flow.phoneVerification = {
acquirePolicy,
submitPhoneNumber,
submitCode,
classifyPhoneError,
recoverAfterTimeout,
}
```
只有两个以上 flow 共享相同短信供应商生命周期时,才考虑把 `phone-sms/providers/*` 下沉到 `core/services/sms`
## 5. 迁移顺序
1. 引入 `activeFlowId / runId / currentNodeId / nodeStatuses / flowContext`,先兼容 OpenAI 旧步骤。
2. 把邮箱、邮件轮询、代理、tab runtime、日志和账号记录逐步参数化,去掉 OpenAI 常量。
3. 建立 `flows/openai` 边界,把 OpenAI 步骤、content driver、OAuth、Plus 和接码逻辑收拢进去。
4. 用第二个真实注册项目验证 flow registry 和 workflow engine,而不是靠假想接口设计过度抽象。
5. 稳定后清理旧 `step` 数字兼容层。
## 6. 新 flow 接入原则
新增注册项目时,只允许新增该 flow 的 workflow、content driver、mail rules、network profile 和必要的私有配置。不要直接修改 OpenAI 步骤,也不要把 OpenAI 的手机号验证、OAuth、Plus 支付逻辑提升为通用能力。
通用层只负责“怎么运行一个 flow”,具体 flow 负责“这个网站怎么注册”。
## 7. 配套设计文档
本边界文档只回答“什么该进 core、什么暂时不要抽”。要真正开工,还需要同时遵守下面四份配套设计:
- `docs/多注册流程状态迁移设计.md`:解决 `DEFAULT_STATE` 扁平模型、旧 step 兼容、自动运行/日志/账号记录如何迁移。
- `docs/多注册流程来源与驱动注册设计.md`:解决 `signup-page`、source family、内容脚本注入和 localhost callback cleanup 的注册表设计。
- `docs/多注册流程邮件分层设计.md`:解决 provider driver 与 flow mail rules 的边界,以及 LuckMail 暂不通用化的问题。
- `docs/多注册流程侧边栏能力矩阵.md`:解决 sidepanel 展示层与业务约束层混在一起的问题。
后续新 flow 设计如果与这四份文档冲突,以“先修正文档边界,再动代码”为准,不允许直接在现有 OpenAI 逻辑上叠条件分支。