{ "$schema": "node_modules/wrangler/config-schema.json", "name": "renewlet", "main": "apps/worker/src/index.ts", // Wrangler 4.150+ 默认上传 source map;显式固定只用于 Cloudflare 堆栈映射,不进入 Static Assets 或 Worker 运行时。 "upload_source_maps": true, // 兼容日期控制 Worker 的运行时行为;工具链升级不自动前移,调整须独立做行为回归。 "compatibility_date": "2026-06-24", "compatibility_flags": ["nodejs_compat"], "alias": { // Worker 没有 DOMParser;固定 AWS 官方 Node 入口,避免 browser 字段把 XML 解析切到 DOM 实现。 "@aws-sdk/xml-builder": "@aws-sdk/xml-builder/dist-cjs/index.js" }, "observability": { // Worker 日志/trace 是线上排障入口;业务错误仍由结构化 API error body 返回给当前操作者。 "enabled": true, "logs": { "enabled": true, "head_sampling_rate": 1 }, "traces": { "enabled": true, "head_sampling_rate": 1 } }, "dev": { // 本地移动端/局域网验收需要监听所有网卡;这个设置只影响 wrangler dev,不改变 Cloudflare 生产入口。 "ip": "0.0.0.0", "port": 8787, "local_protocol": "http" }, "assets": { "directory": "./apps/web/dist", // ASSETS binding 供 Worker 读取内置图标 seed gzip;大静态数据不能重新打进 Worker bundle。 "binding": "ASSETS", // 静态资源使用 SPA fallback;产品 API 和公开 ICS 必须先交给 Worker 做认证/Token 校验。 "not_found_handling": "single-page-application", // 只让精确 ICS feed 路径进 Worker;React 的 /calendar 页面继续走静态资源 SPA fallback。 "run_worker_first": ["/api/*", "/calendar/renewals.ics", "/__scheduled"] }, "triggers": { // Worker Cron 每分钟 tick;真正的用户本地时间窗口和幂等由 notification_jobs 控制。 "crons": ["* * * * *"] }, "d1_databases": [ { // DB 是结构化数据事实源;部署前必须先应用 apps/worker/migrations。 "binding": "DB", "database_name": "renewlet", "database_id": "00000000-0000-0000-0000-000000000000", "migrations_dir": "apps/worker/migrations" } ], "r2_buckets": [ { // ASSETS_BUCKET 只存对象;读取权限必须先经过 D1 assets metadata 的 owner 校验。 "binding": "ASSETS_BUCKET", "bucket_name": "renewlet-assets" } ], "queues": { "producers": [ { // HTTP refresh 只投递后台任务;真正的官方 registry 拉取、校验和 R2/D1 切换由 consumer 执行。 "binding": "MEDIA_ICON_INDEX_REFRESH_QUEUE", "queue": "renewlet-media-icon-index-refresh" } ], "consumers": [ { // 图标索引是全局 active 指针,批量和并发都固定为 1,避免两个 provider job 交错切 D1/R2。 "queue": "renewlet-media-icon-index-refresh", "max_batch_size": 1, "max_batch_timeout": 5, "max_retries": 5, "dead_letter_queue": "renewlet-media-icon-index-refresh-dlq", "max_concurrency": 1 } ] }, "vars": { // Deploy Button 会把模板 vars 暴露给用户填写;构建元信息只允许 CI 写入生成配置。 "SETUP_ENABLED": "true", // 正常配置永远显式关闭维护模式;排他迁移只通过生成的 maintenance 配置打开。 "RENEWLET_MAINTENANCE_MODE": "false" } }