用途:这是预发布应用的 Resend 约定集合,多个仓库共享一个 Resend 账户和域名 apps.timschoch.com。SDK、CLI 命令等代码与命令不在本技能内,需参考 vendor 技能(resend、resend-cli、agent-email-inbox)。
主要约定:仓库根目录提交 resend.json,先读取并复用其中记录。默认地址为 <repo>@apps.timschoch.com,<repo> 取 git remote 中的仓库名,转小写且仅含 a-z0-9-。需要更多地址时用 <name>.<repo>@apps.timschoch.com,每个对应一个具体原因并写入 purpose。每个仓库一个 API 密钥,命名为 <repo>。密钥变量为 RESEND_API_KEY 与 RESEND_WEBHOOK_SECRET,放在 .env.local 与托管环境;resend.json 只存 id,不存密钥。创建密钥和 webhook 需要完全访问权限的 admin key,由用户在当前会话的 shell 中导出,不进入仓库和 .env.local。
步骤:先用 resend domains list 确认 apps.timschoch.com 已验证且可收发,否则停止并告知用户。复制 templates/resend.json 到仓库根目录,填写地址,仅在应用需要响应某地址时设 "inbound": true。创建 API 密钥并在 resend.json 记录名称、id 和权限:仅发送用 sending_access 并限定到该域 id;涉及任意收件地址则需 full_access,因为 Resend 没有更细的读信权限,需告知用户该密钥可管理整个账户。复制 templates/mail.ts 到 lib 并修正对 resend.json 的导入路径,所有邮件走 sendMail(),用地址名选发件人。
仅收件场景:复制 templates/inbound.ts,把应用逻辑放入 handleMail(),在 /api/mail/inbound 添加 POST 路由调用 handleInboundRequest,并针对生产 URL 创建 email.received webhook,将其签名密钥存为 RESEND_WEBHOOK_SECRET,在 resend.json 记录 id 和 endpoint。验证:从默认地址发一封信确认到达;收件地址触发 handleMail(),其他仓库地址返回 200 忽略。
限制:webhook 为账户级,所有 email.received 都会收到整个域各仓库的来信,需保留 inbound.ts 的过滤逻辑。免费版每月 3000 封、每天 100 封为所有仓库共享,超额需告知用户;收信保留 30 天,需自行入库。该共享域名仅用于预发布,上线时应改为应用自己的域名并更新 resend.json、更换并删除旧密钥。官方文本暂未提供。