[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78910":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":17,"lastSyncTime":26,"discoverSource":27},78910,"chatgpt-session-forge","maowuzz\u002Fchatgpt-session-forge","maowuzz","ChatGPT 会话管理与 CPA\u002Fsub2api\u002FCockpit 导出工具 \u002F Local ChatGPT session manager and CPA\u002Fsub2api\u002FCockpit exporter",null,"JavaScript",116,30,49,0,3,45,2,4.47,false,"master",true,[],"2026-06-12 02:03:49","# ChatGPT Session Forge\n\n[English](README.en.md)\n\n一个本地运行的 ChatGPT 会话管理工具，用于导入 Outlook 账号、自动获取 OpenAI 邮箱验证码、批量完成 ChatGPT 登录，并导出 CPA \u002F sub2api \u002F Cockpit 可用的凭证 JSON。\n\n这个项目适合需要集中管理多个 ChatGPT Web Session 的本地工作流。所有账号数据、登录结果和导出文件都保存在本机，不需要外部数据库。\n\n## 功能特性\n\n- 支持批量导入 Outlook 账号\n- 支持 IMAP 与 Microsoft Graph 双协议取件\n- 支持外部邮箱 Provider：Cloudflare Temp Email \u002F Cloud Mail\n- 自动从邮箱中提取 OpenAI 验证码\n- 支持批量 ChatGPT 登录，并可设置并发数\n- 登录进度、状态和日志实时刷新\n- 自动识别账号停用 \u002F 删除类错误\n- CPA 导出：一个账号一个 JSON 文件\n- sub2api 导出：生成包含 `accounts` 数组的聚合 JSON\n- Cockpit 导出：生成 `cockpit-tools` 可直接导入的扁平 Codex token JSON 数组\n- CPA 仓管：扫描 CLIProxyAPI 401 凭证，自动重登获取新 CPA，封号时删除旧凭证\n- 支持粘贴原始 `https:\u002F\u002Fchatgpt.com\u002Fapi\u002Fauth\u002Fsession` JSON 并转换\n- 支持通过环境变量或 Windows 系统代理配置后端出站代理\n\n## 环境要求\n\n- Node.js 18 或更高版本\n- Outlook 账号 OAuth 数据：\n  - 邮箱\n  - 密码\n  - Microsoft OAuth Client ID\n  - Refresh Token\n- 可选：自建 Cloudflare Temp Email \u002F Cloud Mail 收件 API\n- 可以访问以下服务：\n  - `chatgpt.com`\n  - `auth.openai.com`\n  - `outlook.office365.com`\n  - `graph.microsoft.com`\n\n## 安装\n\n```bash\nnpm install\n```\n\n## 启动\n\n```bash\nnpm start\n```\n\n然后打开：\n\n```text\nhttp:\u002F\u002Flocalhost:3000\n```\n\n默认端口是 `3000`。也可以指定端口：\n\n```bash\nPORT=8080 npm start\n```\n\nWindows PowerShell：\n\n```powershell\n$env:PORT = \"8080\"\nnpm start\n```\n\n## 代理配置\n\n后端出站请求使用 `undici`，代理配置在 `config.js` 中：\n\n```js\nproxy: process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.ALL_PROXY || 'auto'\n```\n\n默认值 `auto` 会尝试读取 Windows 当前用户代理。也可以手动指定：\n\n```bash\nHTTPS_PROXY=http:\u002F\u002F127.0.0.1:7897 npm start\n```\n\n如果不想使用代理，可以在 `config.js` 中设置为 `direct` 或 `none`。\n\n## 使用方法\n\n1. 打开 Web UI。\n2. 在“邮箱取件”页点击“批量导入邮箱”。默认使用 Outlook，格式如下：\n\n   ```text\n   user@outlook.com----password----client-id----refresh-token\n   ```\n\n   如果验证码邮件不是 Outlook 收件，而是自建 Cloudflare Temp Email \u002F Cloud Mail，可以在导入弹窗顶部选择对应邮箱服务并填写配置。导入时会自动把 Provider 配置附加到账号行，配置会保存在本机浏览器里。\n\n   也可以手动追加 provider：\n\n   ```text\n   user@example.com----password----client-id----refresh-token----cloudflare-temp-mail----baseUrl=https:\u002F\u002Fmail.example.com;adminAuth=your-admin-auth\n   user@example.com----password----client-id----refresh-token----cloud-mail----baseUrl=https:\u002F\u002Fmail.example.com;token=your-token\n   ```\n\n   `providerConfig` 也支持 JSON：\n\n   ```text\n   user@example.com----password----client-id----refresh-token----cloud-mail----{\"baseUrl\":\"https:\u002F\u002Fmail.example.com\",\"adminEmail\":\"admin@example.com\",\"adminPassword\":\"password\"}\n   ```\n\n3. 进入“自动登录”页。\n4. 选择需要登录的账号，并设置并发数。\n5. 点击登录。\n6. 登录成功后，选择成功账号并导出：\n   - `CPA`：每个账号导出为一个 JSON 文件\n   - `sub2api`：导出为一个聚合 JSON 文件\n   - `Cockpit`：导出为一个 JSON 数组文件，可导入 [jlcodes99\u002Fcockpit-tools](https:\u002F\u002Fgithub.com\u002Fjlcodes99\u002Fcockpit-tools)\n\n## CPA 导出格式\n\nCPA 导出采用“一个账号一个 JSON 文件”的形式。结构示例：\n\n```json\n{\n  \"type\": \"codex\",\n  \"email\": \"user@example.com\",\n  \"account_id\": \"00000000-0000-4000-9000-000000000000\",\n  \"chatgpt_account_id\": \"00000000-0000-4000-9000-000000000000\",\n  \"plan_type\": \"free\",\n  \"chatgpt_plan_type\": \"free\",\n  \"id_token\": \"header.payload.\",\n  \"access_token\": \"real-access-token\",\n  \"refresh_token\": \"\",\n  \"session_token\": \"real-session-token\",\n  \"last_refresh\": \"2026-05-24T00:00:00.000Z\",\n  \"expired\": \"2026-08-22T00:00:00.000Z\",\n  \"disabled\": false,\n  \"id_token_synthetic\": true\n}\n```\n\n该格式由 ChatGPT Web Session 和 access token claims 派生生成。登录成功后程序不会主动退出 ChatGPT，因为退出可能导致 access token 失效。\n\n## sub2api 导出格式\n\nsub2api 导出为聚合结构：\n\n```json\n{\n  \"exported_at\": \"2026-05-24T00:00:00.000Z\",\n  \"proxies\": [],\n  \"accounts\": []\n}\n```\n\n每个账号会包含 OAuth 凭证、账号 ID、用户 ID、套餐类型、过期时间和额外元数据。\n\n## Cockpit 导出格式\n\nCockpit 导出采用 `cockpit-tools` 当前导入逻辑支持的扁平 Codex token JSON 数组。结构示例：\n\n```json\n[\n  {\n    \"type\": \"codex\",\n    \"auth_mode\": \"oauth\",\n    \"email\": \"user@example.com\",\n    \"name\": \"user@example.com\",\n    \"account_id\": \"00000000-0000-4000-9000-000000000000\",\n    \"organization_id\": \"\",\n    \"user_id\": \"user-example\",\n    \"plan_type\": \"free\",\n    \"id_token\": \"header.payload.\",\n    \"access_token\": \"real-access-token\",\n    \"refresh_token\": \"\",\n    \"session_token\": \"real-session-token\",\n    \"last_refresh\": \"2026-05-24T00:00:00.000Z\",\n    \"expired\": \"2026-08-22T00:00:00.000Z\",\n    \"source\": \"chatgpt_session_forge\",\n    \"id_token_synthetic\": true\n  }\n]\n```\n\n`cockpit-tools` 会读取 `id_token`、`access_token`、`account_id`，并在 `refresh_token` 为空时使用 `session_token` 作为回退字段。\n\n## CPA 仓管\n\n“CPA 仓管”页用于直接操作 CLIProxyAPI 的管理 API。处理流程：\n\n```text\n扫描 CPA auth-files\n→ 发现 401 凭证\n→ 用本地同邮箱账号重新登录 ChatGPT\n→ 登录成功：生成 CPA JSON 并上传覆盖\n→ 登录失败且账号已停用：删除 CPA 中的旧凭证\n```\n\n需要填写：\n\n- CPA 地址，例如 `http:\u002F\u002Flocalhost:8317`\n- 管理密钥，对应 CLIProxyAPI 管理 API 的 `Authorization: Bearer \u003Ckey>`\n\n本功能只会自动处理 `status\u002Fstatus_message` 中包含 `401` 或 `unauthorized` 的凭证。其他异常会跳过或记录失败，避免误删。\n\n## 外部邮箱 Provider\n\n外部邮箱 Provider 只影响“获取验证码邮件”这一步，不会改变 ChatGPT 登录、CPA \u002F sub2api \u002F Cockpit 导出和 CPA 仓管逻辑。\n\n导入弹窗已经内置可视化配置面板：\n\n- Cloudflare Temp Email：支持 `TEMP API`、`ADMIN AUTH`、`CUSTOM AUTH`、查询方式、接收邮箱、随机子域和域名更新\n- Cloud Mail：支持 `API 地址`、管理员邮箱、管理员密码和域名\n\n当前支持：\n\n- `cloudflare-temp-mail`：兼容 Cloudflare Temp Email 管理接口，读取 `\u002Fadmin\u002Fmails`，可配置 `adminAuth` \u002F `customAuth`\n- `cloud-mail`：兼容 Cloud Mail 公共接口，读取 `\u002Fapi\u002Fpublic\u002FemailList`，可配置 `token`，或用 `adminEmail` + `adminPassword` 自动获取 token\n\n该兼容层参考了 [FoundZiGu\u002FGuJumpgate](https:\u002F\u002Fgithub.com\u002FFoundZiGu\u002FGuJumpgate) 中 Cloudflare Temp Email \u002F Cloud Mail 的接口思路；本项目没有合并它的仓管功能，只在取验证码邮件这层增加兼容。\n\n## 致谢\n\n- 感谢 [FoundZiGu\u002FGuJumpgate](https:\u002F\u002Fgithub.com\u002FFoundZiGu\u002FGuJumpgate) 提供 Cloudflare Temp Email 和 Cloud Mail 的接口思路。\n- 感谢 [DanOps-1\u002FGpt-Agreement-Payment](https:\u002F\u002Fgithub.com\u002FDanOps-1\u002FGpt-Agreement-Payment) 提供 ChatGPT 协议登录流程参考。\n\n## 本地数据\n\n运行时账号数据保存在：\n\n```text\ndata\u002Faccounts.json\n```\n\n日志保存在：\n\n```text\nlogs\u002F\n```\n\n这两个路径都已加入 `.gitignore`，不会被提交到仓库。\n\n## 安全提醒\n\n本项目会处理高度敏感的数据：\n\n- Outlook 密码\n- OAuth refresh token\n- ChatGPT access token\n- ChatGPT session token\n- 导出的 CPA \u002F sub2api \u002F Cockpit 凭证文件\n\n不要提交运行数据、日志、导出的 JSON \u002F ZIP 文件，或任何包含 token 的截图。公开仓库前请务必检查：\n\n```bash\ngit status --ignored\n```\n\n## 脚本\n\n```bash\nnpm start\n```\n\n启动 Express 服务。\n\n```bash\nnpm run dev\n```\n\n使用 Node watch mode 启动开发模式。\n\n## 许可证\n\n当前暂未选择许可证。如果你希望其他人复用或修改该项目，请在公开发布前添加合适的开源许可证。\n","ChatGPT Session Forge 是一个本地运行的 ChatGPT 会话管理工具，支持批量导入 Outlook 账号、自动获取 OpenAI 邮箱验证码、批量完成 ChatGPT 登录，并导出适用于 CPA\u002Fsub2api\u002FCockpit 的凭证 JSON。其核心功能包括支持 IMAP 和 Microsoft Graph 双协议取件、自动提取邮箱中的验证码、批量登录及实时进度监控等。此外，该工具还提供了多种导出格式，如单账号 JSON 文件、聚合 JSON 文件以及 Cockpit-tools 可直接导入的扁平 Codex token 数组。项目适合需要集中管理和维护多个 ChatGPT Web 会话的场景，所有数据均保存在本机，无需外部数据库。使用 Node.js 18 或更高版本即可安装并运行此工具。","2026-06-11 03:57:20","CREATED_QUERY"]