oak-general-business 更新日志
6.1.0 未发布(区间:6.0.0..HEAD)
- 新增系统翻译链路:
System增加translation、translateState、translationError,并增加translate/translateSuccess/translateFail状态机动作;utils/systemTranslation会按系统翻译配置调用 OpenAI-compatible LLM,将目标实体文本写入localizedContent,通过 digest 跳过未变更内容,并保留人工翻译。 - 新增系统翻译运行时和 UI:start / stop routine 会注册和注销系统翻译 runtime env,
systemtrigger 会在翻译配置或 LLM 配置变化后维护定时任务,components/system/translation和components/system/translationManage支持配置翻译实体、筛选缺失 / 过期 / 已翻译内容、人工编辑翻译和触发翻译动作。 - 新增
localizedContent与areaLocale:区域名称增加en_US、es_ES、fr_FR、ar_SA、ru_RU入库语言,data/areaLocale同步新增多语言数据文件,areaLocale按area + language建唯一索引,供 Area picker 和多语言展示读取。 - 新增 LLM 配置能力:
Config增加Llm,OpenAICompatibleLlmConfig支持命名、extraBody、testExtraBody和默认 60000ms timeout,配置面板提供 LLM 账号维护和testLlmConfig(...)测试入口。 - 新增 HumanVerify 人机校验体系:内置
debug、turnstile、altchaprovider,内置场景覆盖账号登录、登录名注册、手机验证码和邮箱验证码;系统配置可按场景设置observe/enforce、minScore、action和 provider 错误策略。 - HumanVerify 前后端注册面补齐:后端默认注册 debug / Turnstile / ALTCHA provider,并开放
humanVerify/altcha/challengefree endpoint;前端增加features.humanVerify、oak-humanVerifyHost全局组件、provider bundle / client / acquire component / config component 注册入口,配置页内置 debug、Turnstile、ALTCHA 面板。 - 登录、注册和验证码流程接入 HumanVerify:
loginByAccount、registerUserByLoginName、sendCaptchaByMobile、sendCaptchaByEmail会校验传入的 proof;前端features.token方法增加可选humanVerify参数。 registerUserByLoginName变为“注册后立即登录”:后端创建用户和 loginName 后会建立 token,返回tokenValue和inviteTouchId,前端注册成功后直接进入登录态。- 新增邀请归因链路:新增
invite、inviteTouch、inviteRelation实体和getMyInvite/touchInviteaspect;前端features.invite会把未登录访问的 touch 暂存在 localStorage,登录、注册或 token materialize 后写入关系并清理 pending touch。 - 邀请二维码自动化:创建 invite 时会按目标应用类型创建关联
wechatQrCode,支持wechatPublic服务号、带qrCodePrefix的小程序 domain URL,以及普通小程序码。 - 用户实名认证从
user字段迁到独立userAuth申请实体:新增userAuth状态机、审核字段、附件关系和components/userAuth/*/template/my/userAuth,旧components/user/authenticate和template/my/auth已移除。 - 应用访问入口迁移到
Domain:Application.config.location从配置类型、模板数据和配置面板中移除,前端页面 URL 通过composeDomainUrl(...)生成,后台接口 URL 通过composeServerUrl(...)生成;getApplication、微信回调、邀请落地页和二维码调试链接都会过滤已禁用域名。 Domain增加启用状态并弱化端口配置:新增ableState以及enable/disable动作,port改为可空;管理列表改为启用 / 禁用确认操作,新增和编辑弹框补齐取消按钮、空值占位与国际化文案。- 微信扫码中转页和二维码有效期改为系统配置:
System.config.App.scanPage统一配置扫码中转页,默认wechatQrCode/scan,小程序侧会规范化为pages/<scanPage>/index;System.config.App.wechatQrCodeExpireSeconds控制微信临时二维码有效期,单位秒,默认并封顶为2592000。 - 微信公众号 / 小程序回调改为注册表模式:
src/endpoints/wechat.ts只负责 HTTP 验证和解析,项目层通过src/registry.backend.ts注册registerWeChatPublicEventHandler/registerWeChatPublicEventAfterHandler和registerWeChatMpEventHandler/registerWeChatMpEventAfterHandler;applicationId与msgType必填,event仅在msgType === 'event'时必填,旧registerWeChatPublicEventCallback只保留兼容并会在注册时提示弃用。 wechatQrCode创建兜底更明确:显式传入applicationId/type时按目标应用生成;未传时才按System.config.App.qrCodeApplicationId、当前应用、服务号、小程序顺序自动兜底。公众号扫码后的图文链接、微信登录扫码、授权领取和开发环境调试链接都改用启用的Domain拼接。- 配置组件扩展:
components/config/upsert增加 LLM、HumanVerify、SMS / COS 配置注入点,COS 增加 S3 / MinIO 兼容配置,Config类型补齐humanVerify、S3 account / cos 配置和组件 props 类型。 - 系统配置与 OAuth 管理界面优化:基础设置 tab 将默认值说明移到 help / tooltip,表单 label 防止被 tag 挤压;OAuth provider / OAuth app 创建弹框限制浏览器高度并在弹框内滚动,列表列宽和横向滚动做了适配。
- 前端主题迁出通用业务包:删除 package-local
features/theme和types/Theme,共享主题能力改由oak-frontend-base的features.theme、oakTheme和 CSS 变量承接。 - 页面 / 组件配置迁移到
index.config.ts:大量组件补齐CreateComponentConfig,模板和 tabBar 改用setNamespacePath(...)/getNamespacePath(),并统一使用当前pageHeader入口。 - 多语言和依赖元数据更新:组件、实体和 humanVerify locale 增加英文资源;
package.json.oak使用oak.package、oak.business.module、oak.business.featureInit、oak.compiler.transform和前端全局组件声明;peer 依赖对齐 React 19、AntD 6、oak-domain ^6.0.1、oak-frontend-base ^6.0.4。 - 修复 token web 多标签同步竞态:web 开发态也注册
storage监听,刷新旧 token、过期 remove 事件和 token rotation 不会再覆盖或清掉较新的本地 token;switchTo会清理 frontend-base 的 console context 缓存。 - 修复用户证件校验类型、
unset带点字面量 key、过时wx.*方法、AntDDivider titlePlacement和注册页 header 布局。 - 业务组件已迁移到 oak-cli 的 render props 推导,并在 ES 构建启用 XML 与 Less Module 严格检查;传统 TSX 不再以手写
WebComponentProps作为主合同,小程序模板和样式错误会直接阻断构建。 - Application feature 增加 Desktop 解析:浏览器 Web 与 Tauri/Electron 使用 renderer/runtime metadata 区分,离线快照会回放 application opRecords 后再从 cache 读取当前应用。
主要 diff 文件:
src/entities/System.ts、src/entities/Application.ts、src/entities/Domain.ts、src/entities/LocalizedContent.ts、src/entities/AreaLocale.ts、src/entities/UserAuth.ts、src/entities/Invite*.ts、src/types/HumanVerify.ts、src/types/Translation.ts、src/types/Config.ts、src/utils/domain.ts、src/utils/session.ts、src/utils/wechatQrCode.ts、src/utils/wechatEvent/*、src/utils/systemTranslation.ts、src/utils/humanVerify/*、src/aspects/session.ts、src/aspects/token.ts、src/aspects/user.ts、src/aspects/invite.ts、src/aspects/wechatQrCode.ts、src/registry.backend.ts、src/endpoints/wechat.ts、src/endpoints/index.ts、src/features/token.ts、src/features/invite.ts、src/features/humanVerify.ts、src/components/system/*、src/components/domain/*、src/components/config/upsert/*、src/components/oauth/management/*、src/components/userAuth/*、src/data/areaLocale/*、upgrade/6.1.0/*.sql6.0.0(tag:6.0.0,区间:5.11.2..6.0.0)
- 包 metadata 补齐
oak.package/isLib,feature 初始化转为 package metadata 语义。 - 去掉旧
OAK_DEV_MODE参数和部分 alias / fix 脚本依赖。 - 增加英文 locale,通用业务开始为多语言发布包做准备。
- token storage sync 范围收窄,Area picker breadcrumb 和权限编辑组件修复。
主要 diff 文件:
package.json、src/locales/*、src/initialize*、src/components/areaPicker/*、src/components/relation/*升级注意
默认实体覆盖:覆盖通用业务默认实体时必须兼容旧结构。尤其是
User、UserEntityGrant、System 这类会被应用广泛引用的实体,不能只保留新字段而丢掉旧 action/state/locale/style。数据库升级:6.1.0 带有
upgrade/6.1.0/01.sql 到 04.sql,并新增 05.mysql.sql / 05.postgres.sql。前四组脚本会创建 localizedContent、areaLocale、userAuth、invite、inviteTouch、inviteRelation,为 system 增加翻译字段,并从 user 删除旧证件字段;第 5 组脚本会让 domain.port 可空、增加 domain.ableState,并从 application.config 移除历史 location。升级前需要确认历史实名认证数据迁移策略和应用入口域名配置。System 覆盖:应用如果覆盖
System,必须保留 translation、translateState、translationError 以及 translate / translateSuccess / translateFail 动作,否则共享 components/system/panel、系统翻译 trigger 和定时任务会失效。HumanVerify:开启
enforce 后,登录、注册和验证码发送会因为缺少 proof、前端 provider bundle / host 未注册、后端 provider 不可用或评分不足而被拒绝。应用侧需要在 registry / 初始化流程中注册所选 provider,并确认 oak-humanVerifyHost 已被全局组件机制挂载。实名认证入口:旧的
@oak-general-business/components/user/authenticate 已不存在,改用 @oak-general-business/components/userAuth/upsert/index 并以 userAuth 单节点承载申请 / 审核状态。注册语义:
features.token.registerByLoginName(...) 现在会注册并登录,成功后会写入 token。历史代码如果把注册成功页和登录页分离,或假设注册 aspect 只返回用户信息,需要调整后续跳转和状态处理。应用入口配置:不要继续在
Application.config.location 里维护前端访问地址。升级后应在 Domain 配置系统可用域名,必要时用 Application.domainId 精确绑定某个应用;扫码中转页放到 System.config.App.scanPage,微信临时二维码有效期放到 System.config.App.wechatQrCodeExpireSeconds。主题迁移:不要继续从
oak-general-business/features/theme 或 oak-general-business/types/Theme 引入主题能力;改用 oak-frontend-base 的 features.theme、oakTheme 和主题设置组件。