项目完整链路说明
本文档面向 AI 与开发者,目标是让阅读者在最短时间内理解“项目做什么、怎么跑、数据怎么流、功能链路怎么串”,从而在新增功能时不漏逻辑、不误改边界。
使用建议:
- 先阅读 项目文件结构说明.md
- 再阅读本文
- 最后阅读 项目开发规范(AI协作).md
1. 项目目标
这是一个 Chrome 扩展,用于自动执行一整套 OpenAI / ChatGPT OAuth 注册与登录流程。
它的核心价值不是“打开一个页面点几个按钮”,而是把下面这些环节串成一条完整可恢复的自动化链路:
- 生成或选取注册邮箱
- 打开 ChatGPT / OpenAI 注册入口
- 提交邮箱和密码
- 轮询注册验证码
- 填写姓名和生日
- 刷新 OAuth 链接并登录
- 轮询登录验证码
- 自动确认 OAuth 同意页
- 把 localhost 回调提交到 CPA 或 SUB2API
2. 核心运行参与者
2.1 Sidepanel
sidepanel/sidepanel.html + sidepanel/sidepanel.js
职责:
- 展示配置与步骤状态
- 接收用户输入
- 向后台发送命令
- 接收后台广播并更新 UI
- 动态渲染步骤列表
2.2 Background Service Worker
background.js
职责:
- 扩展后台入口
- 装配所有模块
- 统一承接 runtime message
- 协调步骤执行
- 管理状态、自动运行、标签页与内容脚本通信
2.3 Content Scripts
content
职责:
- 在目标网页上执行 DOM 交互
- 读取邮件内容或页面状态
- 将步骤成功/失败状态上报给后台
2.4 Helper / Utils / Provider Logic
分布在根目录和 background/ 下。
职责:
- 抽离第三方邮箱 provider 的纯逻辑
- 抽离邮件匹配与验证码提取
- 抽离共享验证码流程、自动运行流程和运行时基础设施
3. 入口与装配关系
3.1 扩展入口
manifest.json 声明:
background.service_worker = background.js
side_panel.default_path = sidepanel/sidepanel.html
- 多组内容脚本自动注入规则
3.2 背景层装配
background.js 通过 importScripts(...) 依次加载:
- 共享数据与纯工具
- provider 纯逻辑
- 后台桥接层
- 后台共享流程层
- 后台运行时与消息路由层
- 步骤执行模块
因此 background.js 现在更像:
- 常量定义中心
- 模块依赖装配器
- 极少量保留函数
- Chrome 事件挂接入口
3.3 步骤注册
data/step-definitions.js 提供共享步骤元数据。
background/steps/registry.js 负责把“步骤元数据”映射到“步骤执行器”。
这意味着:
- 步骤顺序靠
order
- 步骤文件名靠语义
- 新增步骤时不需要重命名后续文件
4. 状态与存储链路
4.1 chrome.storage.session
保存运行态:
- 当前步骤状态
- OAuth 链接
- 当前邮箱 / 密码
- localhost 回调地址
- 自动运行轮次信息
- 标签注册表
- 最近打开的来源地址
- LuckMail 当前运行时选择
4.2 chrome.storage.local
保存持久配置:
- CPA / SUB2API 配置
- 邮箱 provider 配置
- Hotmail 账号池
- Cloudflare / Temp Email 设置
- iCloud 相关偏好
- LuckMail API 配置
- 自动运行默认配置
4.3 状态广播
后台通过 runtime message 向 sidepanel 广播:
LOG_ENTRY
STEP_STATUS_CHANGED
DATA_UPDATED
AUTO_RUN_STATUS
ICLOUD_LOGIN_REQUIRED
ICLOUD_ALIASES_CHANGED
5. 内容脚本通信链路
5.1 READY 机制
content/utils.js 在脚本加载后会发送 CONTENT_SCRIPT_READY。
后台收到后会:
- 注册当前来源对应的 tab
- 标记 ready
- 冲刷排队命令
5.2 队列与重试
background/tab-runtime.js 负责:
queueCommand
flushCommand
sendTabMessageWithTimeout
sendToContentScriptResilient
sendToMailContentScriptResilient
这保证了:
- 页面切换导致脚本暂时失联时,后台不会立刻误判彻底失败
- 邮箱页或注册页能在注入恢复后继续执行
6. 手动步骤完整链路
Step 1
文件:
流程:
- 后台打开 ChatGPT 官网
- 等待注册入口页内容脚本就绪
- 标记 Step 1 完成
Step 2
文件:
流程:
- 解析本轮应使用的邮箱
- 打开或复用注册页
- 点击注册入口并提交邮箱
- 等待跳转到密码页
Step 3
文件:
流程:
- 生成或读取密码
- 更新运行态密码
- 记录账号快照
- 让内容脚本填写密码并继续
Step 4 / Step 7
文件:
这两步共享验证码主流程:
- 确定 provider
- 必要时重发验证码
- 轮询邮箱或 API
- 提取验证码
- 回填页面
- 若页面拒绝,则重试或回退
Step 5
文件:
流程:
- 生成随机姓名和生日
- 内容脚本填写资料
- 如果页面跳到 ChatGPT onboarding,则执行跳过链路
Step 6
文件:
流程:
- 清理登录前 Cookie
- 通过 CPA / SUB2API 刷新 OAuth 地址
- 打开最新 OAuth 链接
- 登录
- 确保真正进入验证码页
- 如果未进入验证码页,则按可恢复逻辑重试
Step 8
文件:
流程:
- 监听 localhost callback
- 准备 OAuth 同意页
- 尝试多轮点击“继续”
- 一旦捕获 localhost callback,写入状态并完成步骤
Step 9
文件:
流程:
- 校验 localhost callback 是否有效
- 判断是 CPA 还是 SUB2API
- 打开相应后台
- 提交回调地址
- 完成平台侧验证
- 做成功后的清理与标记
7. 邮箱与 provider 链路
7.1 生成邮箱
文件:
支持:
- Duck
- Cloudflare
- Cloudflare Temp Email
- iCloud 隐私邮箱
7.2 Hotmail
组成:
模式:
7.3 LuckMail
组成:
7.4 iCloud
组成:
8. 自动运行完整链路
文件:
流程:
- 读取总轮数与模式
- 计算是否从中断点继续
- 每轮执行前重置必要运行态
- 执行
runAutoSequenceFromStep
- 如果失败,根据设置决定:
- 如果配置了线程间隔,则挂计时计划
- 所有轮次结束后输出汇总
9. 新增功能时最容易漏掉的地方
新增步骤
必须同时检查:
- data/step-definitions.js
- background/steps
- background/steps/registry.js
- 自动运行链路是否需要纳入
- Step 状态传播和侧边栏展示是否需要适配
- 测试是否要补
新增 provider
必须同时检查:
- provider 纯工具
- 后台 provider 调度分支
- 侧边栏配置项
- 动态邮箱生成逻辑
- Step 4 / 7 的验证码流
- 成功收尾逻辑
新增配置项
必须同时检查:
PERSISTED_SETTING_DEFAULTS
normalizePersistentSettingValue
- 导入导出逻辑
- sidepanel 表单与状态恢复
- 结构文档 / 开发规范是否需要更新
10. 文档联动规则
修改下列内容时,必须同步更新文档: