Skip to content

spec: EmailProviderSchema 缺 'smtp',TSDoc 仍称 SMTP 不随 plugin-email 发布(#5087 落地后为假) #5104

Description

@os-zhuang

Blocked-by: #5087

由 #5087 的实现派生。修复落在 packages/spec,而 #5087 的 PR 被派发约束明确禁止碰 spec(同批 #5080 / #4001 正在 spec 内作业,避免撞车),故单独立单。

PM 分诊(勿在解除前派发):除上面的 Blocked-by 外,还需等 spec 车道空出 —— #5080 / #4001 在飞期间本单不可进,因为本单要动的生成物 content/docs/references/system/email-config.mdx 走 merge=os-regen,会静默吞掉一侧改动。详见本单评论。

现状

packages/spec/src/system/email-config.zod.ts:

  • EmailProviderSchema = z.enum(['log', 'resend', 'postmark']) —— 不含 'smtp'。
  • 同文件该 schema 的 TSDoc 明写:「Self-hosted SMTP is intentionally NOT shipped in plugin-email; apps that need SMTP register a custom IEmailTransport themselves and pass it via EmailServicePluginOptions.transport.」

#5087 落地后这两句都不再成立:@objectstack/plugin-email 已内置 SmtpTransport(ADR-0012,nodemailer 惰性加载),EmailServicePluginOptions.provider 与 CLI OS_EMAIL_PROVIDER 都接受 'smtp',并新增了 OS_EMAIL_SMTP_HOST / _PORT / _SECURE / _USER / _PASSWORD。

影响

  • 用 EmailServiceConfig 类型标注 objectstack.config.ts 的作者写 provider: 'smtp' 会拿到类型错误(运行时其实可用 —— CLI 直接读 config.email,不过这个 schema)。
  • 生成文档 content/docs/references/system/email-config.mdx 的 Allowed Values 仍只列三个值,注释也仍在劝人自带 transport。AI 作者读到的就是「SMTP 不受支持」—— 与运行时实际能力相反的 declared ≠ implemented。

建议改动

  1. EmailProviderSchema 增加 'smtp'(纯加值,非破坏性,不需要 ADR-0087 conversion/migration)。
  2. 重写该段 TSDoc:SMTP 由 plugin-email 内置(ADR-0012),nodemailer 为惰性 import。
  3. 顺带说明 EmailServiceConfig.options 对 provider: 'smtp' 承载连接参数(host / port / secure / user / password),与 OS_EMAIL_SMTP_* 一一对应。
  4. 按 AGENTS.md:pnpm --filter @objectstack/spec build && pnpm --filter @objectstack/spec check:generated --fix,提交被证明过期的生成物(至少 email-config.mdx)。

验收

  • EmailServiceConfig 类型接受 provider: 'smtp';
  • 生成的 email-config 参考文档列出 smtp 并且不再宣称 SMTP 需要自带 transport;
  • spec 的生成物门禁全绿。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions