背景:

平台:Devvit SDK
版本: 
/public-api
 v0.12.23
方法:post.addRemovalNote() / comment.addRemovalNote()

问题:

Devvit TypeScript SDK 和 Reddit 后端验证逻辑中删除注释的参数有不一致。SDK 定义了 modNote 为可选参数(modNote?: string),但是提供一个空字符串或忽略该字段导致后端拒绝请求。

具体错误消息:当提交一个删除注释时,提供一个空的 modNote,会返回以下错误:

{"error": "2 UNKNOWN: grpc invocation failed with status 2; Bad request: JSON missing key: \"mod_note\"\nError in field: mod_note"}

bug:

  1. 文档不一致:官方文档和 TypeScript 类型表明 modNote 是可选的。
  2. UI 不一致:在 Reddit 的原生桌面/移动管理界面中,可以在删除注释时不提供自定义管理员注释。
  3. 序列化问题:似乎 Devvit SDK 内部的 gRPC-to-JSON 序列化是丢弃了空字符串的 mod_note 键(标准 Proto3 行为),但是 Reddit 后端 API 网关对该 JSON 键有一个严格的“必填”验证器。

重现问题:

// 这个会失败 
await item.addRemovalNote({ reasonId: "your_reason_id", modNote: "" // 或简单地忽略这个参数 });

临时解决方案:我确认通过传递一个空格字符可以满足后端验证器:

// 这个会成功 await item.addRemovalNote({ reasonId: "your_reason_id", modNote: " " });

请求修复:

请更新后端验证器以允许缺失或 null 的 mod_note 键,或更新 SDK 以确保该键始终在 JSONayload 中存在,即使是空的,以便与宣传的 TypeScript 接口保持一致。