[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
- [Added] App 实例新增
registerHost(host, protocol?) 方法,一次性设置所有端点(CLOUD_API / GATEWAY),只需传入 host 地址自动拼接路径
- [Added]
cloudbase.app.App 类型声明补充 registerHost、getEndPointWithKey、registerEndPoint、registerEndPointWithKey、parseCaptcha 实例方法
- [Added]
ai(options?) 支持传入 baseUrl 参数自定义 AI 服务地址
- [Fixed] AI 模块支持
registerEndPointWithKey 后端点动态变更自动生效(aiBaseUrl / aiBotBaseUrl 改为动态 getter)
- [Fixed] MySQL/RDB 模块支持端点动态变更,
registerEndPointWithKey 后新请求自动使用最新 GATEWAY 地址
- [Fixed] Auth/OAuth 模块支持端点动态变更,
registerEndPointWithKey 后认证请求自动跟随最新 apiOrigin
[3.5.2] 2026-06-24
- [Fixed] 修复 Node 服务端(secretId/secretKey 认证)场景下,
CloudbaseRequest.fetch 因无 oauthInstance 导致请求失败的问题,使 RDB 等模块能正确通过底层 NodeRequest 的 V3 签名自动换取 access_token
[3.5.1] 2026-06-23
- [Added] Auth 模块新增
AuthErrorCode 数字错误码枚举及 AuthError.errorCode、retryAfter 属性
- [Added]
AuthErrorCategory 新增 RATE_LIMITED、CAPTCHA_REQUIRED、CAPTCHA_INVALID、MFA_REQUIRED、PRECONDITION_FAILED、VERIFICATION_FAILED 分类
- [Fixed] Auth
updateUser 中 verifyOtp 校验失败时正确返回错误;仅在实际修改时触发 USER_UPDATED 事件
- [Fixed] 验证码发送补充
target: 'USER' 参数;修复 abort 监听器泄漏、容错解析非 JSON 响应体
[3.5.0] 2026-06-23
- [Added] Storage 模块新增 Neo 环境对象存储能力,
app.storage.from(bucketId) 返回全新对象存储客户端(上传/下载/删除/移动/复制/签名 URL 等)
- [Added]
app.storage 新增 Bucket 管理 API:listBuckets / getBucket / createBucket / updateBucket / deleteBucket
- [Changed]
app.storage.from() 无参仍返回 ClassicStorageFileApi(行为不变);传入 bucketId 返回 Neo 对象存储客户端
- [Deprecated] 传统顶层云存储 API(
uploadFile / downloadFile / deleteFile 等)标记为废弃,推荐改用 app.storage.from(bucketId) 新 API
[3.4.8] 2026-06-16
- [Fixed] 修复
getUser 和 getSession 在无凭证或 accessKey 模式下返回 user 统一返回 null
[3.4.7] 2026-06-16
- [Fixed] Auth 模块
verifyOtp 的 token 参数兼容 number 和 string 类型
[3.4.6] 2026-06-12
- [Refactor] 重构 Node.js adapter 层,整合微信云开发相关请求逻辑(callWxOpenApi / callWxPayApi / callCompatibleWxOpenApi / wxCallContainerApi)
- [Fixed] 修复微信云开发 form-data 请求返回值格式与旧版不一致的问题,正确返回 Buffer 类型响应
- [Changed] request 模块新增 responseType: 'buffer' 支持,兼容二进制响应场景
[3.4.5] 2026-06-10