[3.10.0] 2026-09-18
- [Added] 新增
app.realtime():与 Supabase Realtime 兼容的 Broadcast / Presence / Postgres CDC 客户端。全量引入 @cloudbase/js-sdk 后即可使用;按需引入时注册 registerRealtimeJs(@cloudbase/js-sdk/realtime-js)。文档型 collection.watch() 仍使用 registerRealtime(@cloudbase/js-sdk/realtime),两者互不替代。详见 实时推送
- [Fixed] 云函数:GATEWAY 调用按 HTTP
statusCode 判定成败,不再把成功响应里的 data.code 当成业务错误;非 2xx 时解析 JSON / HTML / 纯文本错误体,throw: false 时返回 {code, message, requestId}
[3.9.1] 2026-09-01
- [Changed] Auth:明确 OTP 校验两条路径的
messageId 契约——signInWithOtp / signUp 返回的 data.verifyOtp 回调无需传 messageId(SDK 已缓存);独立调用 auth.verifyOtp(含 getVerification 发码后)必须传 messageId
- [Changed] Auth:客户端缺参错误改为
missing_required_param(errorCode 4000),错误信息带调用点与参数路径,例如 auth.verifyOtp(params): missing required param 'messageId';与服务端 invalid_argument / 通道未配置(unimplemented)区分
- [Changed] Auth:类型定义 / JSDoc 标明成对 API 的
messageId 必填差异(回调可选,独立调用必填)
- [Fixed] Auth:
AuthError 二次包装不再丢码,避免和 gRPC invalid_argument 混在一起
- [Fixed] 文档型数据库 GATEWAY adapter:
order / projection 去掉 EJSON 数字标记($numberInt),改为网关要求的 [{field,direction}] 与纯 JSON 数值,修复 Invalid order format
- [Fixed] 文档型数据库:单文档查询识别扩展(裸
_id / $eq / $oid),_id 等值走 GET /documents/:docId;单文档更新/删除统一走批量端点;doc.set 的 merge:false 映射为 replaceMode:true
- [Added] 文档型数据库:新增
modifyAndReturnDoc——updateAndReturn 在 _id 等值时走单文档端点 returnDoc,非 _id 条件降级批量更新
- [Changed] 文档型数据库:低层 handler 入参归一化,
query / data / projection 兼容对象与 EJSON 字符串
[3.9.0] 2026-08-27
- [Added] Node 端对齐 v4 / node-sdk 形态:新增统一 throw 开关
config.throw(throwOnCode 仅作为 init 时的别名,canonicalize 后删除;默认 true)。支持实例级 app.setThrowOnCode(value) 与顶层自由函数联动;functions / storage / database 的服务端业务错误与本地校验统一读取该开关,throw=false 时返回 {code, message, requestId}
- [Added] 新增
CloudbaseError(继承 Error):code / message / requestId 可直接访问,对齐 Gateway 业务错误裸对象形状(e.code 无需再 JSON.parse)
- [Changed] 文档型数据库适配 Gateway 2.0 引擎新接口名(
getDocument / insertDocument / modifyDocument 等),并适配 EJSON 参数格式;send() 支持透传单次请求 timeout
- [Changed] BREAKING 本地校验错误由 JSON 字符串
Error 改为 CloudbaseError(message 为纯文本,e.code 可直接访问)
- [Changed] BREAKING
db.RegExp() 内部结构由 $regex / $options 改为 $regularExpression({pattern, options})
- [Changed] BREAKING Node 形态错误码
INVALID_PARAMS 更名为 INVALID_PARAM(对齐 v3 node-sdk)
- [Changed]
@cloudbase/database 升级至 1.5.0,依赖 bson 由 7 降为 6
- [Fixed] MySQL/RDB:兼容小程序等环境下
request.fetch 返回的 header 为普通对象、缺少标准 Headers.get() 的问题,避免 PostgREST 客户端解析响应时抛错
[3.7.1] 2026-08-03
- [Fixed] Auth 事件去重,SIGNED_IN/SIGNED_OUT 统一由 oauth2client 管理,避免重复触发
- [Fixed] 首次登录 SIGNED_IN 回调未携带 user 信息
- [Fixed] 退出登录后切回标签页误触发 SIGNED_IN
- [Changed] OAuth
getCredentials 改为始终以 storage 为准,新增 BroadcastChannel/visibilitychange 跨标签页同步
[3.7.0] 2026-07-30
- [Changed] 工程化:monorepo 迁移至 Yarn 2 (Berry 4.18.0),内部包依赖改用
workspace:* 协议,发布时自动解析为具体版本
- [Changed] 发布流程切换到 Lerna
independent 版本模式,支持按包增量发布(改动 @cloudbase/oauth 时自动联动发布 @cloudbase/auth 与 @cloudbase/js-sdk);各子包 public 化,可单独发布
- [Fixed] 移除
@cloudbase/oauth(CloudbaseOAuth 构造函数)与 @cloudbase/mysql(getEntity)中遗留的调试 console.log
- [Fixed]
@cloudbase/app Node 适配器补全 getSecretInfo 相关类型断言
[3.6.7] 2026-07-30
- [Changed] Auth 模块:验证码接口
getVerification 的 usage 取值统一收敛为 VerificationUsage 枚举(EMAIL / RECOVERY / REAUTHENTICATION),signUp、signInWithOtp、resetPasswordForEmail、updateUser、reauthenticate、resend 等场景不再使用字符串字面量,避免误传
- [Changed]
@cloudbase/oauth 新增导出 VerificationUsage 枚举
- [Changed]
resend 内部 data 的 usage 字段类型由 string 收紧为 VerificationUsage
[3.6.5] 2026-07-28
- [Fixed] 根治使用方在浏览器 / SSR(Next.js、Nuxt 等)打包时因 Node 可选依赖(
jsonwebtoken、@cloudbase/signature-nodejs、ws)报 Module not found: Can't resolve 'xxx' 的问题:这些依赖改由内部 optionalRequire 在运行时按需加载,模块名以片段运行时拼接、require 从宿主运行时获取,打包器静态分析阶段无法识别,因此不会去解析它们。使用方无需再配置 next.config.js 的 serverExternalPackages 或 webpack 兜底
- [Changed] Node 适配器的
wsClass 改为 getter 懒加载:仅当实时能力(realtime / database)真正读取该属性时才加载 ws,未用到实时能力的 Node 场景不会加载 ws;并新增防重复标记,避免未安装 ws 时重复执行加载与重复打印安装提示
[3.6.4] 2026-07-24
- [Fixed] 自定义登录场景下用户通过
init({ env, auth: { credentials } }) 传入的私钥无法被 createTicket 读取的问题:getSecretInfo() 此前仅从顶层 config.credentials 读取,现同时兼容 config.auth.credentials(js-sdk 风格)与顶层 credentials(node-sdk 风格)两种传法
- [Fixed]
dealNodeAdapterConfig() 回填 config.auth.credentials 时会被空值覆盖的问题,改为保留用户显式传入的 credentials;并修正其兜底值类型(ICredentialsInfo 对象,无有效值时为 undefined,不再用空字符串)
[3.6.3] 2026-07-17
- [Changed]
timeout 默认值区分运行环境:Node.js 环境(云函数/云托管/自建服务器)默认不设置超时(不限制),以适配服务端长耗时请求;Web 等非 Node.js 环境仍默认 15000ms。显式传入 timeout 时以传入值为准
- [Changed]
NodeRequest 未设置 timeout 时不再施加超时中断(download 及 createAbortController 均按需启用超时),仅在显式传入 timeout 时启用
- [Changed] Auth
updateUser 不再支持修改密码:传入 password / new_password 参数将抛出错误,请改用 resetPasswordForOld(旧密码修改)、resetPasswordForEmail(验证码重置)或 reauthenticate(重新认证后改密)
- [Changed]
UpdateUserReq 类型从基础请求中剔除 password / new_password 字段(标记为 never)
[3.6.2] 2026-06-29
- [Fixed]
getSecretInfo() 中顶层 secretId/secretKey 场景下 sessionToken 错误地从环境变量 TENCENTCLOUD_SESSIONTOKEN 取值,修正为从 config 顶层 sessionToken 字段取值
- [Fixed]
getSecretInfo() 中 config.auth 场景下 sessionToken 错误地从环境变量取值,修正为从 config.auth.sessionToken 取值
- [Fixed]
NodeRequest V3 签名时 secretId/secretKey/sessionToken 取值逻辑修正为同时支持顶层配置和 config.auth 配置(config.auth 优先级更高)
[3.6.1] 2026-06-29
- [Fixed] AI 模块:优先使用原生 Web Streams API(Node.js >= 18 / 现代浏览器),避免
web-streams-polyfill 在高版本环境中的兼容问题
- [Fixed] 浏览器端 webpack 构建增加
resolve.fallback: { crypto: false },避免引入 Node.js crypto 模块的 polyfill
- [Changed]
@cloudbase/database 依赖 bson 版本从 ^7.1.1 降级为 ^6.10.3
- [Changed]
@cloudbase/mysql 及 database 的 typescript devDependency 升级至 ^5.0.0
- [Changed]
@cloudbase/mysql tsconfig.esm.json 补充 moduleResolution: "node"
[3.6.0] 2026-06-29
- [Fixed] 修复 Node 端构建时
webpack.DefinePlugin 将 process.env 整体替换为静态对象,导致运行时无法读取 TENCENTCLOUD_SECRETID、TENCENTCLOUD_SECRETKEY、SCF_NAMESPACE 等环境变量的问题
- [Fixed]
getSecretInfo() 改为从 getCloudbaseContext() 统一取值(而非直接 getEnv()),确保 context 中的环境变量优先级正确
- [Fixed]
getCloudbaseContext() 新增 CLOUDBASE_APIKEY 环境变量的采集
- [Fixed] AI 模块:Node.js 适配器非流式场景下
responseData 已是 JSON 对象时,跳过 ReadableStream 解析直接返回结果
[3.5.4] 2026-06-25
- [Fixed] 修复 Node.js ESM 环境下初始化时
getWxDefaultAdapter 返回空对象导致 useAdapters 调用 isMatch() 报 TypeError: i is not a function 的问题
- [Fixed] 修复 GATEWAY 模式下文档型数据库集合查询时,后端返回数据缺少
list 字段导致 formatResDocumentData 报 TypeError: Cannot read properties of undefined (reading 'map') 的问题
[3.5.3] 2026-06-25