wrangler.jsonc
Rama main · réplica de lectura del repositorio original.
{
"$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"
}
}