{
 "service": "product-doc-api",
 "version": "1.0",
 "container": "/data/pm",
 "products": 1820,
 "indexKeys": 8121,
 "viewKeys": 8120,
 "endpoints": {
  "GET /api/health": "健康检查",
  "GET /api/products?q=&limit=": "按产品名搜索，返回产品名+资料数",
  "GET /api/docs?product=X[&format=lb|full]": "资料列表（名/类型/大小/页数/delivery/URL）",
  "GET /api/doc?product=X&name=Y[&mode=preview|download|&meta=1]": "文件流（支持 Range）；命中邮件闸时返回申请页 HTML",
  "POST /api/email-code {email}": "发邮箱验证码（先证所有权；验证码 10 分钟有效、试错 5 次作废）",
  "POST /api/email-verify {email,code}": "预校验验证码（申请页据此决定「发送到邮箱」是否可点）",
  "POST /api/email-request {product,cat,email,code?}": "邮件索取：未验证邮箱需带 code；验证后 30 天免验",
  "GET /api/fetch?token=": "签名链接兑现（限时、限次流式下载）",
  "GET /gate?product=X&name=Y": "邮件申请页（可直接深链，也可不用 —— /api/doc 会自动返回它）",
  "GET /api/blocklist": "邮件黑名单列表（退信自动拉黑 + 手动管理；写操作需 x-admin-token）"
 },
 "emailGate": {
  "enabled": true,
  "cats": [
   "计划书",
   "现金价值表",
   "利益演示",
   "讲义",
   "投保建议书"
  ],
  "minBytes": 10485760,
  "linkTtlHours": 72,
  "maxDownloads": 3,
  "smtpReady": false
 },
 "note": "预览通道返回 URL 而非文件内容：H5 塞 iframe、小程序 downloadFile+openDocument、浏览器直开皆可。大文件命中邮件闸时同一个 URL 会返回申请页，调用方无需分支。"
}