[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80085":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":7,"htmlUrl":7,"language":8,"languages":7,"totalLinesOfCode":7,"stars":9,"forks":10,"watchers":11,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":13,"stars30d":14,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":15,"rankGlobal":7,"rankLanguage":7,"license":7,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":18,"createdAt":7,"pushedAt":7,"updatedAt":19,"readmeContent":20,"aiSummary":21,"trendingCount":12,"starSnapshotCount":12,"syncStatus":22,"lastSyncTime":23,"discoverSource":24},80085,"nb-register","nb-register\u002Fnb-register",null,"Python",85,58,59,0,3,25,43.31,false,"main",[],"2026-06-12 04:01:26","# NB Register\n\n本项目用于本地编排账号注册、Outlook 邮件 OTP、GoPay 支付和工作流看板。\n\n> 使用本项目即表示接受 [NOTICE.md](NOTICE.md)。本项目仅限授权研究、内部实验、协议分析、CTF\u002F安全研究和教学验证，严禁商业化运营、账号批量生产或转售、代注册、代充值、规避支付、欺诈、未授权自动化，或任何违反第三方服务条款及适用法律法规的活动。\n\n支付和浏览器自动化相关实现参考并感谢 [DanOps-1\u002FGpt-Agreement-Payment](https:\u002F\u002Fgithub.com\u002FDanOps-1\u002FGpt-Agreement-Payment)。Outlook 邮箱注册流程的实现思路源自 [LainsNL\u002FOutlookRegister](https:\u002F\u002Fgithub.com\u002FLainsNL\u002FOutlookRegister)。\n\n## 快速启动\n\n```bash\ncp -n .env.example .env\n```\n\nDocker Compose 会自动读取项目根目录的 `.env` 做变量插值。编辑 `.env` 顶部的用户配置项，通常只需要改这些：\n\n```env\nREGISTER_PROXY_URL=socks5:\u002F\u002Fhost.docker.internal:10813\n\nOUTLOOK_REGISTER_PROXY=socks5:\u002F\u002Fhost.docker.internal:10810\n# 可选：多个 Outlook 注册\u002FOAuth 代理，设置后会覆盖 OUTLOOK_REGISTER_PROXY。\nOUTLOOK_REGISTER_PROXY_POOL=\n\nGOPAY_COUNTRY_CODE=62\nGOPAY_PHONE_NUMBER=\nGOPAY_WA_PHONE_NUMBER=\nGOPAY_PIN=\nGOPAY_PROXY_POOL=socks5:\u002F\u002Fhost.docker.internal:10810,socks5:\u002F\u002Fhost.docker.internal:10811,socks5:\u002F\u002Fhost.docker.internal:10813,http:\u002F\u002Fhost.docker.internal:10814\nGOPAY_ADD_BALANCE_MODE=manual_transfer\nGOPAY_UNIQUE_ID=\nGOPAY_APPSFLYER_ID=\nGOPAY_WIDEVINE_ID=\nGOPAY_M1_SIGNATURE=\nGOPAY_SCREEN=\nGOPAY_D1=\nGOPAY_STATIC_DEVICE_IDENTITY=false\n```\n\nGoPay 设备身份字段默认每次随机生成；只有 `GOPAY_STATIC_DEVICE_IDENTITY=true` 时才读取固定的 `GOPAY_UNIQUE_ID`、`GOPAY_SCREEN` 等覆盖值。\n\n启动：\n\n```bash\ndocker compose build camoufox-base\ndocker compose up -d --build\n```\n\n打开看板：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8080\n```\n\n健康检查：\n\n```bash\ncurl -fsS http:\u002F\u002F127.0.0.1:8080\u002Fapi\u002Fhealth\n```\n\n## 使用流程\n\n推荐按这个顺序使用：\n\n1. 配好代理和 GoPay 参数，启动整套 compose。\n2. 在看板「邮箱注册」里注册 Outlook 邮箱；注册 job 成功后会启动一个独立 OAuth job。也可以在「邮箱管理」里手动导入已有 Outlook 邮箱和密码。\n3. 如果自动 OAuth job 失败，或导入的是已有邮箱，在「邮箱管理」里点击单个邮箱 OAuth，或点击「补 OAuth」批量补齐 refresh token。\n4. 完成 OAuth 的邮箱会进入账号注册取邮箱池。\n5. 在「账号」页创建\u002F注册账号；注册流程会从邮箱服务领取可用邮箱并等待 OTP。\n6. 需要支付时，在账号详情里补 session token \u002F access token，再触发 GoPay 激活。\n\n## 配置说明\n\n`.env.example` 已按使用频率分层：\n\n- `User settings`：首次运行必须确认，包含账号注册代理、Outlook 注册\u002FOAuth 代理池、GoPay 手机号\u002FPIN\u002F代理。\n- `Optional host ports`：默认即可，只有本机端口冲突时再改。\n- `Stable defaults`：高级默认值，正常不要改。\n\n真实值只写入本地 `.env`。`.env` 会被 Git 忽略；`.env.example` 只保留可提交的空值和安全默认值，用于同步新增配置项。\n\n## Outlook 邮件服务\n\n`outlook-imap-service` 负责邮箱池、OAuth token 刷新和按需收信取 OTP。邮箱管理和 OpenAI 账号注册是分开的：邮箱页面只管理 Outlook 邮箱，账号注册流程只从邮箱池领取可用邮箱。\n\n每个可用于注册取码的 Outlook 邮箱都需要完成 Microsoft OAuth。可以通过看板「邮箱注册」自动注册 Outlook 邮箱；注册成功后会按 `OUTLOOK_REGISTER_ENABLE_OAUTH2=true` 启动独立 OAuth job。这个动作是 best-effort side effect，失败或超时不会影响邮箱注册导入，邮箱会保持 `OAUTH_PENDING`，之后可在「邮箱管理」里点击「补 OAuth」补齐 token。也可以在看板「邮箱管理」里手动添加已有 Outlook 邮箱和密码，再点击「补 OAuth」自动补齐 token。\n\n注册流程等待 OTP 时会自动从 Outlook 拉取近期邮件。缺少 OAuth 的邮箱不会进入注册取码池。\n\n### Outlook 邮箱注册\n\n`outlook-register-service` 的 Outlook 注册思路源自 [LainsNL\u002FOutlookRegister](https:\u002F\u002Fgithub.com\u002FLainsNL\u002FOutlookRegister)。日常使用直接在看板「邮箱注册」里触发；已有邮箱则在「邮箱管理」里导入后执行 OAuth。\n\n先在 `.env` 填写 Outlook 注册参数。常用项如下：\n\n```env\nOUTLOOK_REGISTER_PROXY=socks5:\u002F\u002Fhost.docker.internal:10810\n# 可选：多个 Outlook 注册\u002FOAuth 代理，设置后会覆盖 OUTLOOK_REGISTER_PROXY。\n# 支持逗号、空格或换行分隔；也可以用 OUTLOOK_REGISTER_PROXY_FILE 指向容器内文件。\nOUTLOOK_REGISTER_PROXY_POOL=\nOUTLOOK_REGISTER_PROXY_FILE=\n# 注册成功后自动尝试 OAuth；失败不影响邮箱注册导入。\nOUTLOOK_REGISTER_ENABLE_OAUTH2=true\nOUTLOOK_REGISTER_OAUTH_TIMEOUT_SECONDS=90\n```\n\n其他 Outlook 注册参数通常保持 `.env.example` 默认值即可。\n\nOutlook 注册和 OAuth 对代理质量比较敏感，推荐使用代理池：\n\n- `OUTLOOK_REGISTER_PROXY`：单代理 fallback，保持向后兼容。\n- `OUTLOOK_REGISTER_PROXY_POOL`：内联代理池，支持逗号、空格或换行分隔，例如 `socks5:\u002F\u002Fhost.docker.internal:10810,socks5:\u002F\u002Fhost.docker.internal:10814`。\n- `OUTLOOK_REGISTER_PROXY_FILE`：文件代理池，文件位于容器内；仅用于临时运行时配置，不作为业务持久化来源。\n- 如果设置了代理池，注册和 OAuth 每次动作会轮换取一个代理；未设置代理池时才使用 `OUTLOOK_REGISTER_PROXY`。\n\n日常推荐直接用看板「邮箱注册」按钮。如果没有新账号，注册动作会返回失败，不会把空结果当成功。注册器默认同一时间只跑一个注册进程；重复触发会直接返回锁错误。\n\n邮箱前缀会用 Python `Faker(\"en_US\")` 生成英文名\u002F姓并追加数字后缀，例如 `adamdiaz4168@outlook.com`，避免纯随机字母串。\n\n验证码默认走自动流程；遇到当前脚本不能处理的验证码类型、风控页或代理质量问题时，注册会失败并在服务日志中记录原因，换代理后重新触发即可。\n\n看板「邮箱注册」用于自动注册 Outlook 邮箱并导入邮箱池，并为新邮箱启动 best-effort OAuth job；看板「邮箱管理」里的 OAuth 按钮用于补跑或手动触发 OAuth，自动登录微软并换取 refresh token。dashboard 不挂 Docker socket，也不执行宿主机命令。\n\n如果 Microsoft 要求验证备用邮箱，使用 `OUTLOOK_REGISTER_OAUTH_PROOF_EMAIL` 提供备用邮箱；验证码仍走服务流程，不通过结果目录文件持久化。\n\n注册过程日志：\n\n```bash\ndocker compose logs -f dashboard\ndocker compose logs -f orchestrator\ndocker compose logs -f outlook-register-service\n```\n\n## GoPay OTP\n\n`whatsapp-otp-relay` 统一接收 WhatsApp OTP webhook，并缓存给编排服务通过 gRPC 消费。手机端通知转发工具默认把收到的 GoPay OTP POST 到：\n\n```text\nhttp:\u002F\u002F192.168.0.115:8081\u002Flocal\u002Fgopay\n```\n\n仓库内置了一个专用 Android 转发器：\n\n```bash\ncd whatsapp-forwarder\n.\u002Fgradlew assembleDebug\n```\n\n本地安装 `whatsapp-forwarder\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Fdebug\u002Fapp-debug.apk`，或从 GitHub Releases 下载 `whatsapp-forwarder.apk`。安装后确认 webhook URL，并在系统设置中启用 `WhatsApp Forwarder` 通知访问。\n\n本机测试：\n\n```bash\ncurl -X POST http:\u002F\u002F127.0.0.1:8081\u002Flocal\u002Fgopay \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"otp\":\"123456\",\"source\":\"whatsapp\"}'\n```\n\n本地来源使用 `\u002Flocal\u002Fgopay`；Telegram 用户来源使用 `\u002Ftg:\u003Cuser_id>\u002Fgopay`。也支持纯文本 payload。\n\nGoPay 支付参数在 `.env` 中配置：\n\n```env\nGOPAY_COUNTRY_CODE=62\nGOPAY_PHONE_NUMBER=\nGOPAY_WA_PHONE_NUMBER=\nGOPAY_PIN=\nGOPAY_PROXY_POOL=socks5:\u002F\u002Fhost.docker.internal:10810,socks5:\u002F\u002Fhost.docker.internal:10811,socks5:\u002F\u002Fhost.docker.internal:10813,http:\u002F\u002Fhost.docker.internal:10814\nGOPAY_ADD_BALANCE_MODE=manual_transfer\nGOPAY_ADD_BALANCE_ENVELOPE_LINK=\nGOPAY_ADD_BALANCE_TRANSFER_INSTRUCTIONS=\nGOPAY_ADD_BALANCE_TRANSFER_AMOUNT_RP=1\nGOPAY_ADD_BALANCE_TRANSFER_CURRENCY=IDR\nGOPAY_ADD_BALANCE_REKBERINAJA_ENDPOINT_URL=https:\u002F\u002Fapi.rekberinaja.com\u002Fapi\u002Ftransaction\u002Fproduct\u002Fcheckout\nGOPAY_ADD_BALANCE_REKBERINAJA_BEARER_TOKEN=\nGOPAY_ADD_BALANCE_REKBERINAJA_REFRESH_TOKEN=\nGOPAY_ADD_BALANCE_REKBERINAJA_DEVICE_ID=\nGOPAY_ADD_BALANCE_REKBERINAJA_STORE=rekberinaja\nGOPAY_ADD_BALANCE_REKBERINAJA_PRODUCT_ID=\nGOPAY_ADD_BALANCE_REKBERINAJA_SERVICE_ID=\nGOPAY_ADD_BALANCE_REKBERINAJA_PAYMENT_METHOD=saldo\nGOPAY_ADD_BALANCE_REKBERINAJA_INVOICE_EMAIL=\nGOPAY_ADD_BALANCE_REKBERINAJA_PROMO_CODE=\nGOPAY_ADD_BALANCE_REKBERINAJA_USE_POIN=false\nGOPAY_ADD_BALANCE_REKBERINAJA_FEE_TOTAL_RP=1300\nGOPAY_ADD_BALANCE_REKBERINAJA_POLL_TIMEOUT_SECONDS=180\nGOPAY_ADD_BALANCE_REKBERINAJA_POLL_INTERVAL_SECONDS=5\nGOPAY_ADD_BALANCE_REKBERINAJA_USER_AGENT=Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F148.0.0.0 Safari\u002F537.36\nGOPAY_ADD_BALANCE_REKBERINAJA_ORIGIN=https:\u002F\u002Frekberinaja.com\nGOPAY_ADD_BALANCE_REKBERINAJA_REFERER=https:\u002F\u002Frekberinaja.com\u002F\nGOPAY_ADD_BALANCE_CONFIRM_TIMEOUT_SECONDS=1800\nGOPAY_UNIQUE_ID=\nGOPAY_APPSFLYER_ID=\nGOPAY_WIDEVINE_ID=\nGOPAY_M1_SIGNATURE=\nGOPAY_SCREEN=\nGOPAY_D1=\nGOPAY_STATIC_DEVICE_IDENTITY=false\n```\n\n`GOPAY_PROXY_POOL` 为必填，支持逗号、空格或换行分隔，协议按实际入口填写 `socks5:\u002F\u002F`、`http:\u002F\u002F` 等。手机号探测遇到 429 时，同一个手机号会轮换到转轮里的下一个代理并生成新设备指纹；如果转回本次第一个代理仍未成功，本次流程失败。\n\nGoPay 支付流程的 `add_balance` 编排参数可以为空；为空时流程会停在 `gopay_app_add_balance` step，由看板选择手动转账、红包或 R 平台。只有手动转账会继续等待人工确认；红包和 R 平台会自动提交并进入后续支付。红包链接会写入 orchestrator DB 的 `runtime_secrets`，后续流程可长期复用，API 传入新 link 时会替换。R 平台需要配置 token、device、product、service 和 invoice email；access\u002Frefresh token 初始从环境变量读取，刷新成功后会写入 `runtime_secrets`，后续流程优先使用 DB 中的新 token。\n\n## CheckPhone Telegram Bot\n\n`checkphone-tgbot` 通过 Telegram Bot API 长轮询 `getUpdates` 接收消息，再用 `sendMessage` 回复检测结果，所以不需要开放 webhook 端口。手机号检测仍走 bot 内置检测逻辑；GoPay 账号 state 统一经 orchestrator 写入 `gopay-app`。\n\n在本地 `.env` 填写：\n\n```env\nTELEGRAM_BOT_TOKEN=\n# 可选：只允许这些 chat id 使用，逗号\u002F空格\u002F换行分隔；留空表示不限制。\nTELEGRAM_ALLOWED_CHAT_IDS=\n# 可选：Telegram API 代理，GoPay 检测使用 GOPAY_PROXY_POOL 转轮。\nTELEGRAM_PROXY=\n```\n\n启动：\n\n```bash\ndocker compose --profile tgbot up -d --build checkphone-tgbot\n```\n\nBot 支持：\n\n```text\n1. 发送 \u002Fcheck-gopay-registered\n2. 按提示发送手机号\n```\n\n手机号支持 `628xxxxxxxxxx`、`8xxxxxxxxxx`、`+62 8xxxxxxxxxx` 这几类格式。手机号必须作为命令后的下一条消息发送。\n\nTelegram 命令菜单本身只允许小写字母、数字和下划线，不能显示 `\u002Fcheck-gopay-registered`，所以菜单只保留 `\u002Fhelp` 说明项。\n\nGoPay 登录命令遵循 `TELEGRAM_ALLOWED_CHAT_IDS` 的聊天入口限制。流程：\n\n```text\n\u002Flogin-gopay\n按提示发送手机号\n按提示发送 PIN\n如需二次验证，按提示发送 OTP\n```\n\n登录成功后 bot 会检查 GoPay Wallet 余额是否大于 `GOPAY_REQUIRED_BALANCE_RP`，默认是 `1` Rp。GoPay state 只保存到 `gopay-app` 的数据库表，来源只允许 `local` 或 `tg:\u003Cuser_id>`；token 不会通过 Telegram 返回。可用 `\u002Fgopay-status` 重新检查已保存账号余额，用 `\u002Fclear-gopay-state` 清空当前 Telegram 用户的 GoPay state。\n\n## 看板操作\n\n在 `http:\u002F\u002F127.0.0.1:8080` 可以执行：\n\n- 创建账号：可不填邮箱\u002F密码；邮箱会从邮箱池领取，密码会随机生成。\n- 邮箱注册：自动注册 Outlook 邮箱并导入邮箱池。\n- 邮箱管理：查看邮箱状态，手动导入已有 Outlook 邮箱，或对缺 token 的邮箱执行 OAuth。\n- 注册账号：触发 `browser-reg`，默认最多等待 180 秒获取 Outlook 邮件 OTP；如果邮箱服务没取到码，可以在「工作流详情」对运行中的注册 job 手动提交 OTP。\n- 激活账号：使用账号 session token \u002F access token 触发 GoPay 支付，等待 `whatsapp-otp-relay` 回传 GoPay OTP。\n- 注册并激活：按顺序执行注册和支付。\n- 账号详情：查看\u002F隐藏账号密码，修改 session token。\n- 工作流详情：查看 job 状态、步骤、错误和结果摘要。\n\n账号有运行中的 job 时，行内操作会显示“进行中”并禁止重复触发。\n\n## 常用命令\n\n查看服务：\n\n```bash\ndocker compose ps\n```\n\n查看日志：\n\n```bash\ndocker compose logs -f orchestrator\ndocker compose logs -f browser-reg\ndocker compose logs -f gopay-payment\ndocker compose logs -f whatsapp-otp-relay\ndocker compose logs -f outlook-imap-service\n```\n\n重启单个服务：\n\n```bash\ndocker compose restart dashboard\n```\n\n重建单个服务：\n\n```bash\ndocker compose up -d --build dashboard\n```\n\n停止：\n\n```bash\ndocker compose down\n```\n\n## 开发检查\n\n```bash\n.\u002Fscripts\u002Fgenerate-proto.sh\n(cd account-db && go test .\u002F...)\n(cd orchestrator && go test .\u002F...)\n(cd dashboard && go test .\u002F...)\n(cd outlook-imap-service && go test .\u002F...)\n(cd outlook-register-service && python3 -m py_compile register_service.py register_provider.py camoufox_register.py)\n(cd dashboard\u002Fweb && npm run build)\ndocker compose --env-file .env.example config --quiet\n```\n\n## 赞赏\n\n\u003Cimg src=\"assets\u002Fzan.jpg\" alt=\"赞赏码\" width=\"240\">\n","nb-register 是一个用于本地编排账号注册、Outlook 邮件 OTP、GoPay 支付和工作流看板的 Python 项目。该项目支持通过 Docker Compose 快速部署，核心功能包括自动化 Outlook 邮箱注册与 OAuth 认证、邮箱管理、账号注册时的 OTP 获取以及 GoPay 支付流程集成。它特别适用于授权研究、内部实验、协议分析、CTF\u002F安全研究和教学验证等场景。用户可以通过配置环境变量来定制代理设置、支付参数等，并通过 Web 界面进行操作管理和监控。需要注意的是，该项目明确禁止用于商业化运营或其他违反第三方服务条款及法律法规的行为。",2,"2026-06-11 03:59:12","CREATED_QUERY"]