[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82917":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":26,"discoverSource":27},82917,"wa-app","pood1e\u002Fwa-app","pood1e",null,"Go",397,221,66,2,0,82,262,316,411,91,false,"main",[],"2026-06-12 04:01:39","# wa-app\n\n`wa-app` 是 WA 应用链路的应用层服务。它把 WA 应用链路实现为 Go 原生原子 gRPC 接口，并用 PG\u002FRedis 管理服务状态。`wa-re` \u002F `app-release-re` 仅作为已验证参考材料，不作为运行时桥接脚本。\n\n> [!CAUTION]\n> 使用本项目即表示你同意 [NOTICE](.\u002FNOTICE) 的全部条款。本项目仅限协议建模、教学演示、授权安全研究和内部非商业验证；禁止用于任何商业用途、盈利服务、客户交付、SaaS\u002F托管服务、代运营、账号注册\u002F交易\u002F代收码、营销自动化、灰产\u002F黑产服务、未授权目标或违反第三方服务条款的场景。一切法律、合规和安全责任由使用者自行承担。\n\n## 边界\n\n- 不修改 `wa-re\u002F` 和 `app-release-re\u002F` 下的脚本与材料，也不通过进程桥接这些脚本。\n- Proto 是 RPC、状态、错误码和事件语义的真源。\n- PG 存长期事实：WAAccount、client profile、注册记录、消息元数据、解密\u002F候选值投影。\n- 注册成功后的登录态以 `LoginState` 投影保存；敏感登录材料只保存在受控 profile\u002Fstate 工作区或 TTL 运行态。\n- Redis 存 TTL 运行态：幂等窗口、消息会话 lease。\n- OTP、Flag、token、authkey、key\u002Fsession 等敏感值不写普通日志；PG 中只保存引用或脱敏值。\n\n## 目录\n\n- `proto\u002Fbyte\u002Fv\u002Fforge\u002Fwaapp\u002Fv1\u002F`：服务契约。\n- `internal\u002Fapp\u002F`：服务编排、PG store、Redis runtime、Go 原生协议 engine、detached tooling。\n- `cmd\u002Fwa-app-service\u002F`：gRPC 服务入口。\n- `migrations\u002F001_init.sql`：PG 表结构。\n- `docs\u002Fmodeling.md`：动作拆分和状态边界说明。\n- `workflows\u002Fn8n\u002Fwa\u002F`：WA 编排工作流定义；只串联原子动作，不桥接参考脚本。\n- `webui\u002F`：WA 管理 dashboard 远程模块。\n- `NOTICE`：非商业使用须知与免责声明。\n\nGo\u002FTypeScript proto 生成物不入库；需要由 `scripts\u002Fgenerate-proto.sh` 和 `webui` 的 `npm run proto` 从 `proto\u002F` 真源生成。\n\n## 运行配置\n\n必需：\n\n- `WA_APP_PG_DSN`\n- `PLATFORM_REDIS_URL`\n\n可选：\n\n- `WA_APP_LISTEN_ADDR`，默认 `:50091`\n- `WA_APP_DASHBOARD_HTTP_ADDR`，默认 `:8080`\n- `WA_APP_DASHBOARD_STATIC_DIR`，默认 `\u002Fapp\u002Fdashboard\u002Fwa`\n- `WA_N8N_WEBHOOK_BASE_URL`，例如 `http:\u002F\u002Fn8n-webhook:5678\u002Fwebhook`\n- `PROXY_RUNTIME_API_BASE_URL`，用于直连登录态检测与长连接恢复时申请\u002F释放美国随机动态 IP\n- `PLATFORM_NATS_URL`，用于把 WA 长连接收到并解出的 OTP 发布到平台 MQ（NATS JetStream）\n\n协议 endpoint、WASafe 公钥、WA app 版本、User-Agent、ChatD host\u002FTLS\u002Ftimeout、请求 timeout、本地 profile 目录和设备指纹策略都内置在 wa-app 原生 engine 中，不再作为运行时环境变量暴露；号码探测\u002F注册必须通过 proxy-runtime 的短租约动态代理传入。\n\n## 原子 RPC\n\n- Discovery：登记 app artifact、记录协议能力 profile。\n- Profile：创建 WAAccount、准备\u002F查询\u002F退役客户端 profile。\n- Registration：账号探测、请求验证码、提交验证码、查询注册记录。\n- LoginState：查询注册成功后的活动登录态；`CheckLoginState` 会用原生 chatd 被动短连接握手检测远端登录态，并在消息会话打开前校验该登录态属于对应 WAAccount\u002Fclient profile。\n- Messaging：打开消息会话、批量接收消息、ack、关闭会话、查询长连接状态；注册\u002F登录态检测成功后会自动恢复消息长连接。\n- Extraction：解密消息、提取 OTP\u002FFlag 候选值；长连接收到 OTP 后发布 `byte.v.forge.wa.otp.received` 平台事件，payload 标明号码、来源和 OTP。\n- Tooling：生成 detached phone profile、导入 WAMSYS 捕获、构造注册请求材料、WASafe ENC、APK token\u002Fauthkey 派生。\n\n## n8n 编排\n\n- `workflows\u002Fn8n\u002Fwa\u002Fproxy\u002Fwa-us-dynamic-ip.workflow.json`：从 proxy-runtime 申请美国随机动态 IP lease；不做出口 IP、风控、CF 或目标连通性预检。\n- `workflows\u002Fn8n\u002Fwa\u002Fregistration\u002Fwa-register.workflow.json`：注册编排只申请动态 IP、生成并提交注册用设备指纹、发起 SMS OTP、等待 OTP resume 回调、提交验证码并持久化登录态；号码探测不进入 n8n。\n\n登录态检测是 wa-app 直连接口：`POST \u002Fapi\u002Fwa\u002Flogin-state-check`，不会进入 n8n。\n\n详细输入\u002F输出和 action API 约定见 `workflows\u002Fn8n\u002Fwa\u002FREADME.md`。\n\nn8n 工作流需要 `PROXY_RUNTIME_API_BASE_URL`，用于向 proxy-runtime 申请和释放美国随机动态 IP lease。\n\n## 前端管理页\n\n`webui\u002F` 发布 module federation 远程模块 `\u002Fmf\u002Fwa\u002FremoteEntry.js`，导航项为 `WA 管理`。页面包含：\n\n- 账号管理：WAAccount 列表、分页和添加入口是默认首屏。\n- 工具箱：输入手机号和国家拨号码执行轻量号码探测。\n- 号码探测动作：调用 `\u002Fapi\u002Fwa\u002Fphone\u002Fsms-probe`，由 wa-app dashboard BFF 直连 wa-app 原子能力；每次探测生成随机设备指纹但不持久化，使用 1 分钟 proxy-runtime 美国随机动态 IP 短租约，用完立即释放，不进入 n8n。\n- 号码解析使用 libphonenumber 元数据，不维护固定国家码表，也不强解未规范化号码。\n- n8n action gateway：`\u002Fapi\u002Fwa\u002Factions\u002F*` 由 wa-app 提供，负责指纹临时态、注册 OTP、登录态持久化和登录态远端检测动作。\n- 注册流程仍由 `POST \u002Fapi\u002Fwa\u002Fregister` 转发到 n8n `wa\u002Fregister`，不属于号码池或批量准备页面。\n- 后端自动补齐：`job_id`、`request_id`；检测号码和检测 SMS 可发送使用 proxy-runtime 美国随机动态 IP 短租约，不暴露也不持久化代理账号、代理国家\u002F地区或具体代理绑定。\n- 工作流状态页：展示当前 n8n webhook 接入状态和 WA webhook path。\n- 长连接状态：号码详情会展示当前长连接、chatd ping 心跳、最近心跳和最近消息时间。\n\n前端展示会脱敏 token、OTP、cookie、session、auth\u002Fkey 等字段。\n\n## 本地验证\n\n当前仅做非构建类验证：\n\n```bash\nwa-app\u002Fscripts\u002Fgenerate-proto.sh\nprotoc -I wa-app\u002Fproto -I common-lib\u002Fproto --descriptor_set_out=\u002Ftmp\u002Fwa-app.pb $(find wa-app\u002Fproto -name '*.proto' | sort)\n(cd wa-app && go list .\u002F...)\n(cd wa-app && go vet .\u002F...)\n(cd wa-app\u002Fwebui && npm run proto && npm run lint)\n```\n\n不要在 Mac 本机执行业务构建、镜像构建或部署验证。\n","`wa-app` 是一个基于 Go 语言开发的应用层服务，用于实现 WA 应用链路，并通过 gRPC 接口提供原子操作。该项目利用 PostgreSQL 和 Redis 来管理服务状态和运行时数据，确保了高效的数据处理与存储。它定义了一系列原子 RPC 接口，涵盖了从账号注册、登录态检测到消息处理等核心功能。适合于协议建模、教学演示以及内部非商业验证等场景使用，明确禁止任何商业用途及违反第三方服务条款的行为。","2026-06-11 04:09:38","CREATED_QUERY"]