Changelog
本页内容由 VitePress 直接 include
packages/auth/CHANGELOG.md,changesets 在每次发版时自动维护,无需手工编辑。
@tripo3d/auth
2.9.0
Minor Changes
fbc5723: 新增登录链路过程埋点能力:构造选项
onEvent让宿主接收 SDK 各阶段事件(只给裸事件名与低基数参数,事件坐标由宿主补全),getJourneyId把宿主的登录旅程 ID 随transient_payload透传给 Kratos,使服务端 flow 可与前端阶段事件关联。两者均为可选,不传时行为与此前一致。覆盖的事件:登录墙展示与放弃(
login_dialog_shown带surface=dialog|page、login_dialog_dismissed)、方法选择(login_method_selected,Google 另以google_entry区分 GSI 按钮 / One Tap / 重定向兜底)、分步返回(login_step_back)、身份预检与发码提交(identifier_checked、code_sent、code_submitted、password_submitted)、已有会话(session_already_available)、OIDC(oidc_authorized、oidc_edge_verified)、重置密码三步(reset_code_sent、reset_code_submitted、reset_password_submitted)、独立登录页交接(login_handoff)。前端校验拦下、未抵达 IDP 的失败同样上报rejected,与服务端失败共用事件名但可按error_domain拆分。失败归因收敛到低基数取值:
error_class不再透传 ory flow 实例 UUID(body.id每次请求都变,会让看板维度爆炸),改为取稳定的error.id或ui.messages[].id并映射为code_invalid/password_invalid/identifier_missing等;error_domain区分business_validation/client_network/product_technical/risk_control,使用户输错与服务故障不再混进同一个失败率。埋点通道永不 throw,上报失败不影响认证流程。
2.8.3
Patch Changes
- 31d2f89: 新增登录弹框 UI 配置能力:支持在应用启动阶段预取运营中台配置,并按传入的样式 variant 渲染左侧视觉、图片、品牌/场景文案及 Form 标题、副标题;配置异常时自动回退到内置 control,不改变认证流程、认证方式或用户政策。
2.8.1
Patch Changes
- Updated dependencies [7bd5d65]
- @tripo3d/design@0.12.0
2.8.0
Minor Changes
- 5af9ebd: @tripo3d/auth 新增 Nuxt 入口,并整合 Google GSI / 登录信号链路:包含
./nuxt导出、publishLogin/consumeSignal/readSignalRecord等信号能力,以及对pendingSignals的有界清理修复。
2.7.3
Patch Changes
- b9a649b: - @tripo3d/auth: 登录左侧品牌区改用 left-background.webp 背景图替换紫色光晕 div
2.7.2
Patch Changes
- 9552f14: - @tripo3d/auth: 新增 useFedcmForButton 构造项与 preloadGoogleGsi 预热接口,GSI 按钮按浏览器探测 FedCM 并在加载/提交失败时降级;修复邮箱验证码跨步冷却、网络异常 i18n 文案与轮播图解码后再切换
2.7.1
Patch Changes
- fabebb1: - @tripo3d/auth: 新增浏览器 FedCM 探测决定 GSI 按钮 UX,加 preloadGoogleGsi 预热与 onInteractionError 交互异常降级;renderGoogleButton 失败改 resolve null(破坏签名)
2.7.0
Minor Changes
710b822: feat(auth): 将
auth.reset密码重置拆分为三步,修复验证码错误与密码错误串屏原来
auth.reset.submitNewPassword({ code, password })把「提交验证码」与「改密」合并为一次原子调用,两类错误(验证码错、密码错如「新密码不能与旧密码相同」)都从同一次调用抛出且同为FLOW类型,UI 无法区分,导致密码错误被错误地显示在验证码输入步。现拆分为三步(对齐auth.settings的两屏 UX):- 新增
auth.reset.verifyCode({ code }):提交验证码完成提权(recovery flow → privileged session)。验证码错误在此抛FLOW;未先sendCode抛VALIDATION。 - Breaking:
auth.reset.submitNewPassword签名由{ code, password }改为{ password },只在已提权的 session 内改密。密码类错误(新旧相同 / 强度不足)在此抛FLOW且保留提权状态(可原地改密重试,无需重新验码);提权过期抛PRIVILEGED_SESSION_EXPIRED。调用前必须先verifyCode,否则抛VALIDATION。
迁移:
await auth.reset.submitNewPassword({ code, password })→await auth.reset.verifyCode({ code }); await auth.reset.submitNewPassword({ password })。另外:
auth.reset.submitNewPassword成功后现在会写登录信号 cookie(writeSignal({ provider: 'password' }))。recovery 验证码校验通过时 ory 已把当前会话认证为登录态,重置密码即完成一次登录,故与submitPassword/submitCode/ oidc 一致写信号;容器(dialoguseConsumeSignal关窗+emitLogin / 独立页useReadSignal跳 returnTo)自动收尾直接进入登录态,不再引导重新登录(旧行为回登录页会因已认证 session 撞 "you are already logged in")。- 新增
2.6.2
Patch Changes
- Updated dependencies [5e2daaa]
- @tripo3d/design@0.11.0
2.6.1
Patch Changes
- Updated dependencies [72f26c5]
- @tripo3d/design@0.10.0
2.6.0
Minor Changes
- 003934d: - @tripo3d/auth: 新增 oidc.promptGoogleOneTap 编排器与 oidc.submitIdToken(id_token 直传登录),导出 GoogleOneTapConfig / GoogleOneTapOptions 类型
2.5.0
Minor Changes
1fc70be: feat(auth): 支持注入 transient_payload(device_id 构造期 + 调用期附加)到全部 update*Flow
TripoAuthOptions新增deviceId?: string:设备级静态值,构造时注入后自动作为transient_payload.device_id注入登录/注册/重置/改密链路的全部update*Flow- 各动作方法 options 新增
transientPayload?: Record<string, unknown>:本次调用附加的临时数据,与构造期deviceId合并后注入(deviceId优先)。覆盖login.sendCode/submitCode/submitPassword/startOidc、reset.sendCode/submitNewPassword、settings.sendVerifyCode/verifyCode/updatePassword transient_payload仅本次提交对后端 / webhook 可见、不落库到 identity traits;OIDC 由 ory 暂存在 flow 上,回跳完成认证时仍可取到- 全部新增字段可选,不传时请求体不含
transient_payload,向后兼容
2.4.0
Minor Changes
41af6a2: feat(auth): 恢复手机号验证码登录并支持 OIDC provider 显隐配置
- core
login.sendCode/login.submitCode新增重载,支持{ phone }(手机号为完整号码串,区号在 UI 层拼),邮箱调用零改动 - UI 新增
loginMethod('email' | 'phone',互斥)与oidcProviders(per-provider 显隐开关)两个 prop,作用于showLogin/LoginPage/LoginDialog - phone 模式仅验证码(无密码、无忘记密码),区号固定 +86
- core
2.3.0
Minor Changes
- 093500d: - @tripo3d/auth: 重构 signal 为单 payload 事件模型,OnLoginHandler 改收 { signal, context };新增 logout 事件与 onLogout 订阅,移除内部 _emitEvent/_onEvent;emitLogin 派发前 refresh 兜底、emitLogout 派发前 clear token
2.2.3
Patch Changes
- 461a4f4: - @tripo3d/auth: 修复登录面板移动端宽度抖动,OidcEdgeForm 改用 fragment 结构与 LoginForm 布局对齐
2.2.2
Patch Changes
- 44a1b80: - @tripo3d/auth: 重构登录信号为独立 signal 命名空间,onLogin 从 auth.login 迁至 auth.signal,新增 readSignal/writeSignal/emitLogin
2.2.1
Patch Changes
8c53b83: fix(auth): cookie not carried/persisted on ory requests
RequestClient.fetcher将默认credentials: 'include'放在了...init之前,被 ory runtime 显式注入的init.credentials === undefined反向覆盖,导致跨子域请求既不携带 cookie 也不接受 Set-Cookie(表现为security_csrf_violation)。修复:
request.ts改为先...init、再用if (merged.credentials === undefined)兜底注入,并按原始 HeadersInit 形态补Accept/Content-Type。client.ts在Configuration中显式传credentials: 'include',从 ory 官方入口把initParams.credentials设为'include'。
8c53b83: fix(auth): token.get() 不再主动从 0 探测 ory
之前
token.get()在「无 cache」时会自动触发refresh()→ 调 orytoSession,未登录用户每次业务请求都会连锁产生一次 401,把请求拦截器变成请求风暴源。修复后
get()的语义按「读」收敛:- 有新鲜 cache → 直接返回
- 有 cache 但临近过期 → await refresh
- 无 cache 但已有在飞 refresh → 复用 inflight
- 无 cache 也无在飞 → 直接返回 undefined(不打 ory)
业务约定「有 token = 已登录」「无 token ≈ 未登录」。首次探测请业务在 SPA bootstrap 阶段显式调
auth.token.refresh(),由它去打 ory;refresh 失败/返回undefined即为未登录。
2.2.0
Minor Changes
- aa1bca7: - @tripo3d/auth: 新增 auth.settings 命名空间(sendVerifyCode/verifyCode/updatePassword),支持已登录用户经邮箱验证码提权后改密码,并加 PRIVILEGED_SESSION_EXPIRED 错误类型
2.1.0
Minor Changes
- f637c48: - @tripo3d/auth: 新增 ./vite 子路径导出 tripoAuth 插件,并为 showLogin/LoginDialog 增加 locale 入参及 LocaleInput 类型
2.0.0
Major Changes
- 1e14b06: - @tripo3d/auth: 重构 SDK 入口,拆分 . 与 ./ui 双导出,TripoAuthParams 改名 TripoAuthOptions,新增 showLogin 登录页 UI 层与 fetchSessionToken
1.0.1
Patch Changes
- 2a54385: - @tripo3d/auth: 修正 token 刷新流程,刷新前先清缓存并移除过期回退老 token 的兜底
1.0.0
Major Changes
- ab5fb7b: - @tripo3d/auth: 重构为 namespace 门面(login/oidc/password/token/bus),重命名
tokenized为token,新增跨窗事件总线 BusApi
0.5.5
Patch Changes
- Updated dependencies [cc7084b]
- @tripo3d/utils@0.4.0
0.5.4
Patch Changes
- Updated dependencies [41562bd]
- @tripo3d/utils@0.3.0
0.5.1
Patch Changes
- @tripo3d/auth: 折叠 fetcher 默认注入 credentials/Accept/Content-Type,并在 flow handler 兜底非 JSON 响应避免裸 SyntaxError
- @tripo3d/design: 给 preview opener 的 close/setIndex/setPosition 加 SSR 守卫,防止跨请求 state 污染
0.5.0
Minor Changes
- 新增
fetchTokenized?: (fetcher: FetchAPI) => Promise<string | undefined>构造参数。业务方可注入自定义续签策略(团队版定制 endpoint),优先于默认_api.toSession({ tokenizeAs: 'default_jwt' })调用。fetcher已折叠 middleware,自定义请求需带credentials: 'include'。
Patch Changes
- 内部重构:
src/core.ts1011 行单文件 → 17 文件结构(error.ts/request.ts/flow-handler.ts/oidc.ts/custom-endpoints.ts/flows/{login,signup,settings,verification,recovery,logout,merge,index}.ts+ 瘦身后的core.ts)。公开 API 0 变化。 setTokenized签名从Promise<void>改为void(实际为同步方法,业务方await仍合法)。- OIDC popup 关闭检测改为
focus+visibilitychange事件驱动,移除原先的setInterval(500ms)轮询。修复 Chrome 的Cross-Origin-Opener-Policy policy would block the window.closed call.警告。 - 7 个原 arrow function property 方法(
setTokenized/tokenized/oidcCallback/continueFlowCallback/oidcCancelledCallback/oidcErrorCallback/requestLocaleFromOpener)转为 prototype method,this绑定语义更清晰。 - 移除误装的
from/importnpm 包(dependencies 清理)。