升级至SDK 0.6及新功能规则
从 JavaScript SDK 调用 Edge Functions 的项目的清单,其中包含您可能需要轮换的机密。
1. 发生了什么变化
安装新版本:
该版本进行了一项安全更改,并对错误和响应的报告方式进行了多项修复。安全性更改也在功能服务中:无论您使用什么 SDK 版本,一旦服务更新,它就会应用到您的项目。
2. 重大变化
管理调用现在需要 service_role 密钥
functions.list()、 get()、 listJobs()、 getJob()、 enqueueJob()、 listCronJobs()、 createCronJob() 和 deleteCronJob() 将 403 返回给公钥或登录用户。之前,list() 和 get() 将每个函数的源代码和变量返回给持有公钥的任何人。请参阅 安全模型。
仅返回前端需要的内容(例如名称),而不返回整个定义。
不能是 JSON 的正文将被拒绝
invoke(name, { body: new Blob(…) }),与 ArrayBuffer、类型化数组、 FormData、 URLSearchParams 或 ReadableStream相同,现在返回错误代码 invalid_body。之前,函数收到{},没有报错。对二进制数据进行编码 (base64) 或将其上传到存储并发送其路径。
函数自己的 502、 503 或 504 是 FunctionsHttpError
以前,这些状态始终被归类为 FunctionsRelayError,即使您的代码返回了它们。现在 FunctionsRelayError 意味着 平台 失败。如果您重试 FunctionsRelayError,请检查您的重试逻辑是否仍然匹配:请参阅 错误、超时和重试。
FunctionDef 更精确
env_vars 是 Record<string, string> (它是 Record<string, unknown>)并添加 permissions 。读取这些字段的代码可以继续工作;分配另一种类型的值的代码不再编译。
3. 行为修复
| 之前 | 现在 |
|---|---|
返回带有文本的 500 的函数生成消息 "null" | 该消息是您的函数返回的文本 |
返回 200 并生成文本 { data: null, error: null } 的函数 | data 是文本 |
默认模式下的二进制响应产生 { data: null, error: null } | error.code 是 invalid_response 并且消息表明 responseType |
responseType: 'text' 带有错误 JSON { "error": "…" } 显示 HTTP 503 | 消息是从 JSON 中读取的,与默认模式一样 |
'text'、 'blob' 和 'arrayBuffer' 没有默认超时 | 客户端超时(30 秒)适用 |
| 未编码的函数名称被插入到 URL 中 | 它被编码:a/../b 保留在其路径内 |
作业上的 delaySecs 被忽略:作业立即运行 | 该作业等待其日期 |
新导出: FunctionsHttpError、 FunctionsRelayError、 isRelayStatus 和 FunctionsResponseType 来自 @aurabase/aurabase-js 以及 @aurabase/functions。如果您从 @aurabase/functions导入它们,那么它仍然有效;使用 pnpm,您不再需要该包作为直接依赖项。
在 @aurabase/auth中, getClaims() 结果中 email 的类型现在是 string | null,这是服务为没有电子邮件地址的用户返回的类型。
CLI。 aura functions deploy 不再删除已存在函数的秘密。 aura functions invoke --data 拒绝无效的 JSON,而不是发送 {}。 aura functions download 适用于 Deno 函数。 aura functions serve 监听它宣布的端口。 aura studio 在端口 3000 上打开 Studio。
4.轮换暴露的秘密
如果您的项目运行在此更改之前的服务版本,则您的公钥的任何持有者都可以读取您的函数的代码和变量。假设他们被读到:
- 使用
service_role键列出您的函数并打开每个函数的变量。 - 轮换它们包含的每个秘密:支付密钥、webhook 秘密、第三方令牌。
- 删除直接写入
index.ts中的机密并将其移动到变量中。 - 检查项目的作业和警报规则中是否有您未创建的条目。
5. 清单
- 在浏览器中或使用公钥运行的代码中搜索
functions.list(、functions.get(、listJobs(、getJob(、enqueueJob(、createCronJob(、deleteCronJob(和listCronJobs(的代码。 - 搜索非纯 JSON 的
body:值。 - 检查依赖于
FunctionsRelayError的重试逻辑。 - 如上所述轮换机密。
- 更新 CLI。