Skip to content
autionalPublic

About

Autional Consent — 高风险操作确认 PWA (consent.autional.cn/.com)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

consent · 高风险操作确认 PWA

🚨 2026-11-10 托管变更:*.autional.cn 已迁出 Vercel —— 改为 mf01 构建(node:24-alpine + 钉版 pnpm)→ 香港自建托管。 .cn 的构建 env 由 workspace shared/infra-ops/sites/sites.manifest.json 注入;push 后由 mf01 cron(约 10 分钟)构建发布,不经 Vercel。 *.autional.com 仍在 Vercel —— 本文中涉及 Vercel 的构建/部署描述对 .com 仍然成立。 现行口径:workspace docs/AUTIONAL-CN-SITES-SELF-HOST.md。

consent.autional.cn / consent.autional.com 的唯一源站(双区单源,照 authenticator 的目录/发布模式)。

形态

  • 单页 PWA(Vite + React + TypeScript)。

  • 登录:平台 OIDC 授权码 + PKCE(auth.autional.{cn,com})。

  • 实时更新:登录后先 POST .../consents/stream-ticket 换一次性票据,再 EventSource(.../consents/stream?ticket=…) 建流;事件只当"有变化"信号,收到即重拉列表;切到后台暂停、回到前台重连并重拉;断线指数退避(1s→30s)。状态徽标在标题旁(实时/重连中/已断开)。

    • ⚠️ 边缘必须对长连接关缓冲:.cn 走香港 nginx 两层(宿主 → sites 容器)→ api.autional.cn,默认 proxy_read_timeout 60s + 缓冲会让 EventSource 收不到事件,已在 sites 管线用 streamPaths + proxySets[].stream 放行;.com 走 Vercel rewrite,实测可直接流式。
    • 前端另有 30s 轮询兜底(VITE_CONSENT_POLL_MS,0=关闭,标签页隐藏时跳过):SSE 只当加速通道,边缘/服务异常时列表仍会刷新。
  • 登录过期:接口 401 会清 token 并显示「重新登录」,不再出现"提示过期但无出口"。

  • 页面:/ 待确认列表、/c/:id 确认详情、/oauth/callback 登录回调。

  • API:/bff/ops/v1/consents*(.com 由 Vercel rewrite、.cn 由香港 nginx 反代 → API_ORIGIN)。

  • 不持有任何数据库/服务凭据;只展示与提交确认决定。

本地

pnpm install
pnpm dev            # http://localhost:13113
pnpm build
pnpm typecheck
pnpm test

本地演示(后端未实现时)

pnpm mock           # 内存 mock API,127.0.0.1:11080
pnpm dev
# 打开 http://localhost:13113/?demo=1

演示数据只有 3 条(R1/R2/R3),决策只改内存状态;重启 mock 即重置。

正式后端:shared/service-consent(3 表 + 3 端点 + 审计 fail-closed),已在 prod 部署。生产构建默认走 /bff/consent/api/v1/ops;本地 dev 默认仍走 mock,联调真实后端按下方 VITE_CONSENT_BASE_URL=/api/v1/ops 设置。

2026-11-10:两区已重新部署 79f2c43;线上 env.js 已含 VITE_CONSENT_BASE_URL=/bff/consent/api/v1/ops,Playwright 线上真实 OAuth 登录→列表→批准→审计全链路通过。

本地联调真实 service-consent

# 终端 1:后端(内存库 + 演示数据)
cd shared/service-consent
CONSENT_REQUIRE_ADMIN=false \
CONSENT_SEED_DEMO=1 CONSENT_DEMO_TENANT=tenant-a \
go run ./cmd/server

# 终端 2:前端(Vite 代理 /api/v1 -> :11030)
cd .refs/site-consent
VITE_CONSENT_BASE_URL=/api/v1/ops \
VITE_CONSENT_DEV_HEADERS=1 \
VITE_CONSENT_PROXY_URL=http://localhost:11030 \
pnpm dev
# 打开 http://localhost:13113/?demo=1

Git Bash 下必须带 MSYS_NO_PATHCONV=1,否则 /api/v1/ops 会被 MSYS 转成 Windows 路径。

VITE_CONSENT_DEV_HEADERS=1 只在 dev 注入 X-User-ID/X-Tenant-ID/X-User-Roles;生产由网关注入,前端不伪造。

本地默认 REGION=cn、SITE_URL=https://consent.autional.cn、API_ORIGIN=http://localhost:11080;生产构建(VERCEL_ENV=production)缺 REGION/SITE_URL/API_ORIGIN/VITE_OAUTH_CLIENT_ID 直接失败。

环境变量

变量 说明
REGION cn / com
SITE_URL https://consent.autional.cn / .com
API_ORIGIN https://api.autional.cn / .com
VITE_OAUTH_CLIENT_ID consent 自己的 OAuth 公开 client id
FRONTEND_API_MODE proxy(推荐)或 direct;direct 需服务端 CORS
CDN_HOST https://cdn.autional.cn / .com
DEFAULT_LANG / FALLBACK_LANG zh / en

Vercel(.com)/ mf01(.cn)

2026-11-10:.cn 已迁出 Vercel,本节关于项目/env/部署的描述仅对 .com 成立;.cn 见 workspace docs/AUTIONAL-CN-SITES-SELF-HOST.md。

  • .cn 项目 cn-consent(prj_6Ib6WYGRtuWOvQBhKtj3ozPJOzLW),.com 项目 consent(prj_8QPYe7AUcuKh9poFaynEH6b0tJf8);同一仓、同一 vercel.ts,只换环境变量。
  • 推 main:.com 由 Vercel 自动部署;.cn 由 mf01 cron 构建发布(约 10 分钟,不经 Vercel)。CLI 重投(仅 .com)按 shared/entry-proxies/README.md。
  • vercel.ts 由 CLI 本地编译:命令环境与 Vercel 项目 env 都要有 API_ORIGIN。
  • Hobby 下成员仓必须 public(ADR-017)。

部署状态(2026-11-09)

  • GitHub:https://github.com/autional/consent,main 已推送。
  • Vercel:两个项目均已创建并部署(cn-consent / consent),Production READY。
  • ⚠️ cn-consent 的 Ignored Build Step 若被设为 true,Vercel 会直接取消构建(日志:deployment was canceled because the Ignored Build Step command returned exit code 0)。已清空;再遇到 CN CANCELED 先检查该设置。
  • .com:GoDaddy CNAME consent -> 4f90496b90f22370.vercel-dns-017.com.;证书已签发,https://consent.autional.com 200。
  • .cn:DNSPod CNAME consent -> 181a2b43c72b9f9d.vercel-dns-017.com. 已配置;Vercel 证书已签发(CN=consent.autional.cn);https://consent.autional.cn 200。
  • OAuth:独立 client client-9R0t08yqe4gF(public;redirect .cn/.com + localhost;cors_origins 两域);两区 authorize 探针均 302 → 各自 /oauth/callback?error=login_required。
  • 两区 env.js 均已含 VITE_OAUTH_CLIENT_ID=client-9R0t08yqe4gF。
  • /、/env.js、/manifest.webmanifest、/sw.js、/oauth/callback、/c/<id>(Accept html)均 200;缺失静态资源 404。
  • 两区自动构建均可用:.com = Vercel Git 部署;.cn = mf01 cron(2026-11-10 起迁出 Vercel)。2026-11-09 Vercel 手动 API 部署额度耗尽(100/天)只影响 .com 的手动重投。
  • API:两区 FRONTEND_API_MODE=proxy;若改 direct,CORS 已在 client 上登记两域。

OAuth client

注册独立 client(不要复用 authenticator 的):

  • redirect:https://consent.autional.cn/oauth/callback、https://consent.autional.com/oauth/callback
  • 若用 direct:把两个 consent 域写进 oauth_clients.cors_origins
  • VITE_OAUTH_CLIENT_ID 指向该 client;缺省会回落到 authenticator 的 01AR...0005(错误)。

About

Autional Consent — 高风险操作确认 PWA (consent.autional.cn/.com)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages