Skip to content

Uint8Array request body. #86

Description

@lang2hong

警告:你针对 Uint8Array 二进制请求体调用了字符串读取方法;当前 SDK 会自动将二进制字节数组转为字符串,后续版本该行为会直接抛出报错。
来源:AWS‑SDK v3 协议解析模块 JsonCodec2

根因分析📌
AWS SDK 底层请求体原始类型为 Uint8Array(二进制字节)
你的业务 / 封装代码直接执行了 body.toString()、request.text() 这类字符串 API
SDK 现在做兼容自动转码,新版本将移除兼容逻辑、直接抛出异常
下方日志 Build · Claude Opus 4.8 ... kiro‑auth 代表该告警发生在你调用 Claude API、鉴权请求链路

分级修复方案
方案 A:手动处理 Uint8Array(标准正确写法,TS 兼容)
typescript
运行
// 错误写法(触发告警)
const str = request.body.toString()

// 正确写法,显式解码二进制缓冲区
const uint8 = request.body as Uint8Array;
const bodyText = new TextDecoder("utf‑8").decode(uint8);
const payload = JSON.parse(bodyText);
方案 B:使用 AWS‑SDK 原生字节解析 API
如果你是调用 AWS 客户端,可以读取 response.body 流:
typescript
运行
const resp = await client.send(command);
// 优先使用 .transformToByteArray / transformToUtf8
const rawBytes = await resp.body.transformToByteArray();
const text = await resp.body.transformToUtf8();

长期规避建议💡
TypeScript 开启严格类型检查(你之前配置的tsc --noEmit),约束请求体类型,禁止把Uint8Array直接调用字符串函数
封装统一的工具函数处理 AWS 请求字节体
typescript
运行
export async function readAwsBody(body:unknown):Promise{
if (body instanceof Uint8Array) return new TextDecoder().decode(body)
return String(body)
}
升级 aws‑sdk 依赖时留意更新日志,该废弃兼容行为之后会变成运行时异常

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions