{"id":44170527,"url":"https://github.com/ieax/renewhelper","last_synced_at":"2026-02-09T10:11:38.186Z","repository":{"id":327910573,"uuid":"1111570597","full_name":"ieax/renewhelper","owner":"ieax","description":"RenewHelper - 时序·守望是一款基于Cloudflare Workers的全栈服务生命周期提醒、管理工具。它专为管理周期性订阅、域名续费、服务器到期等场景设计。无需服务器，零成本托管，提供精美的机甲风（Mecha-style）UI 界面、强大的农历/公历计算核心、多渠道通知推送能力、iCal日程同步以及账单管理功能。同时支持Worker和Docker方式部署。","archived":false,"fork":false,"pushed_at":"2026-01-11T09:06:37.000Z","size":1990,"stargazers_count":214,"open_issues_count":8,"forks_count":105,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-11T14:51:29.536Z","etag":null,"topics":["icalendar","notify","renew","subscribe"],"latest_commit_sha":null,"homepage":"https://lostfree.de5.net","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ieax.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-07T07:53:52.000Z","updated_at":"2026-01-11T14:30:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ieax/renewhelper","commit_stats":null,"previous_names":["ieax/renewhelper"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ieax/renewhelper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ieax%2Frenewhelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ieax%2Frenewhelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ieax%2Frenewhelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ieax%2Frenewhelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ieax","download_url":"https://codeload.github.com/ieax/renewhelper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ieax%2Frenewhelper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29261651,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T04:11:57.159Z","status":"ssl_error","status_checked_at":"2026-02-09T04:11:56.117Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["icalendar","notify","renew","subscribe"],"created_at":"2026-02-09T10:11:37.544Z","updated_at":"2026-02-09T10:11:38.178Z","avatar_url":"https://github.com/ieax.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🕒 RenewHelper - 时序·守望 (Service Lifecycle Manager)\n\n[English](./README_EN.md) | **中文**\n\n![Cloudflare Workers](https://img.shields.io/badge/Cloudflare-Workers-orange?logo=cloudflare)\n![Vue.js](https://img.shields.io/badge/Frontend-Vue3%20%2B%20ElementPlus-42b883?logo=vue.js)\n![License](https://img.shields.io/badge/License-MIT-blue)\n\n**RenewHelper - 时序·守望** 是一款基于 **Cloudflare Workers** 的全栈服务生命周期提醒、管理工具。它专为管理周期性订阅、域名续费、服务器到期等场景设计。无需服务器，零成本托管，提供精美的机甲风（Mecha-style）UI 界面、强大的农历/公历计算核心、多渠道通知推送能力以及 iCal 日程同步。**同时支持Worker方式和Docker方式部署。v2.x新增资金流向看板，拥有完善的账单管理功能。v3.x前后端完全分离重构，不依赖任何CDN引入即可独立运行。**\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/mainUI_darkCN_shotv2.png\" alt=\"RenewHelper 界面预览\" width=\"800\"\u003e\n  \u003cimg src=\"./assets/DashboardUI_darkCN.png\" alt=\"RenewHelper 界面预览\" width=\"800\"\u003e\n\u003c/div\u003e\n\n## ✨ 核心特性\n\n- **⚡️ Serverless 架构**：完全运行在 Cloudflare Workers 上，利用 KV 存储数据，无需购买 VPS，免费额度通常足够个人使用。并同时支持单机Docker方式部署，不依赖任何CDN引入即可独立运行。\n- **📅 智能周期管理**：\n  - 支持**公历**与**农历**（Lunar）周期计算。内置高精度农历算法（1900-2100），支持公历循环（如月付/年付）和农历循环（如生日、传统节日）。\n  - 支持按天、月、年为周期的自动推算。\n  - 提供“循环订阅”与“到期重置”两种模式。\n- **🔔 多渠道通知**：\n  - 内置支持 **Telegram, Bark, PushPlus, NotifyX, Resend (Email), Gotify, Ntfy, Webhook**。\n  - 允许添加**无限个**推送渠道，支持为每个项目配置不同的推送渠道。\n  - 支持自定义推送标题、提前提醒天数和每日推送时间。\n- **💰 资金流向看板** (New v2.0+)：\n  - 提供精美的账单统计视图，支持按月、按年查看消费趋势。\n  - 支持**多币种**混合统计（自动汇率转换）。\n  - 支持区分**账单金额**（预算）与**实际支出**（实付）。\n  - 提供未来 n 天待付账单预览。\n- **🤖 自动化管理**：\n  - **自动续期**：到期自动更新下次提醒时间。\n  - **自动禁用**：过期太久未处理的服务自动标记为禁用。\n  - **Cron 触发**：支持通过 Cloudflare Cron Triggers 每日定时检查。\n- **📆 ICS 日历订阅**：提供标准的 `.ics` 订阅链接，可完美接入 iOS 日历、Google Calendar 或 Outlook，支持基于时区的精确提醒并同步到您的手机日程中。\n- **🛡️ 安全可靠**：\n  - JWT 身份验证，支持高强度密钥自动生成。\n  - 混合限流策略（内存 + KV），防止暴力破解。\n  - 数据仅存储在您私有的 Cloudflare KV 中。\n  - 敏感操作（删除、重置）二次确认。\n- **🎨 现代化 UI**：\n  - Vue 3 + Element Plus 构建的单文件前端。\n  - 支持深色/浅色模式切换。\n  - 响应式设计，完美适配移动端和桌面端。\n  - 中英双语界面。\n  - 支持数据导入/导出备份。\n\n---\n\n## 🚀 部署指南\n\n### 方式一：自动一键部署 (推荐)\n\n[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/ieax/renewhelper)\n\n1.  点击上方按钮。\n2.  授权 Cloudflare 访问您的 GitHub 账户（用于 Fork 仓库）。\n3.  按照指引完成部署，Cloudflare 会自动为您创建 Worker 和 KV 命名空间。\n4.  **重要**：部署完成后，请进入 Cloudflare Dashboard -\\\u003e Workers \u0026 Pages -\\\u003e 您的项目 -\\\u003e **Settings/设置** -\\\u003e **Variables/变量**。\n    - 添加环境变量：`AUTH_PASSWORD`，值为您想设置的登录密码（默认为 `admin`）。\n    - 绑定 KV 命名空间：确保变量名为 `RENEW_KV`（不能改！！！）。\n\n### 方式二：网页手动部署 (新手推荐)\n\n如果您没有 Github，可以直接在 Cloudflare 网页后台完成部署。\n\n#### 第一步：创建 KV 存储桶\n\n1.  登录 [Cloudflare Dashboard](https://dash.cloudflare.com/)。\n2.  在左侧菜单点击 **Workers \u0026 Pages** -\u003e **KV**。\n3.  点击 **Create a namespace**。\n4.  输入名称：`RENEW_KV`或其他任意名称 (建议大写，方便识别)，点击 **Add**。\n\n#### 第二步：创建 Worker 服务\n\n1.  回到 **Workers \u0026 Pages** -\u003e **Overview** 页面。\n2.  点击 **Create application** -\u003e **Create Worker**。\n3.  给 Worker 起个名字，例如 `renewhelper`，点击 **Deploy**。\n4.  部署成功后，点击 **Edit code** 进入代码编辑器。\n\n#### 第三步：粘贴代码\n\n1.  在代码编辑器左侧的文件列表中，选中 `worker.js`。\n2.  **全选并删除**里面的所有默认代码。\n3.  将本项目提供的 `_worker.js` 完整代码复制并粘贴进去。\n4.  点击右上角的 **Deploy** 按钮保存代码。\n\n#### 第四步：绑定 KV 数据库 (关键)\n\n1.  点击左上角的箭头返回到 Worker 的详情页面 (或者点击顶部的 Worker 名称)。\n2.  点击 **Settings** (设置) -\u003e **Variables** (变量)。\n3.  向下滚动找到 **KV Namespace Bindings** (KV 命名空间绑定)。\n4.  点击 **Add binding**：\n    - **Variable name (变量名)**: 必须填写 `RENEW_KV` (不能改！！！)。\n    - **KV Namespace (命名空间)**: 下拉选择你在第一步创建的那个存储桶。\n5.  点击 **Save and deploy**。\n\n#### 第五步：设置登录密码\n\n1.  还在 **Variables** 页面，向上滚动找到 **Environment Variables** (环境变量)。\n2.  点击 **Add variable**：\n    - **Variable name**: `AUTH_PASSWORD`\n    - **Value**: 输入你想设置的后台登录密码 (如果不设置，默认为 `admin`)。\n3.  点击 **Save and deploy**。\n\n#### 第六步：设置定时任务 (Cron)\n\n为了让自动续期功能生效，**须要设置定时触发器。**\n\n1.  点击页面顶部的 **Triggers** (触发器) 标签。\n2.  向下滚动找到 **Cron Triggers**。\n3.  点击 **Add Cron Trigger**。\n4.  **Cron schedule**: 准确输入 `0,30 * * * *` (代表 UTC 时间每天每个半点检查一次，不能改！！！)。\n5.  点击 **Add Trigger**。\n\n### 方式三：GitHub Actions 部署 (进阶推荐)\n\n此方法适合希望**自动同步更新**且关注**隐私安全**的用户。您无需授权第三方应用，所有密钥均存储在您自己的 GitHub 仓库中。\n\n1.  **Fork 项目**：点击本项目右上角的 **Fork** 按钮，将仓库复制到您的 GitHub 账户。\n2.  **准备 Cloudflare 密钥**：\n    - **Account ID**：登录 Cloudflare Workers 首页右侧获取。\n    - **API Token**：[My Profile](https://dash.cloudflare.com/profile/api-tokens) -\u003e API Tokens -\u003e Create Token -\u003e 选择 **Edit Cloudflare Workers** 模板 -\u003e 生成并复制。\n3.  **创建 KV 数据库**：\n    - 在 Cloudflare 后台创建一个 KV 命名空间（如 `RENEW_KV`）。\n    - 复制该 KV 的 **ID**。\n\n4.  **配置 GitHub Secrets**：\n    - 进入您 Fork 的仓库 -\u003e **Settings** -\u003e **Secrets and variables** -\u003e **Actions**。\n    - 点击 **New repository secret**，依次添加4个变量：\n        - `CF_API_TOKEN`: 填入您的 API Token。\n        - `CF_ACCOUNT_ID`: 填入您的 Account ID。\n        - `CF_KV_ID`: 填入您刚刚复制的 KV ID (Actions 会自动注入)。        \n        - `AUTH_PASSWORD`: 填入您的登录密码(设置后，即使同步代码也不会被覆盖)。\n\n5.  **启用并部署**：\n    - 进入 **Actions** 标签页，点击绿色按钮 **I understand my workflows...** 启用。\n    - 在左侧选择 **Deploy to Cloudflare Workers**，点击右侧 **Run workflow** 手动触发首次部署。\n    - **后续更新**：每当原作者发布新版本，您只需在 GitHub 点击 Sync Fork，Actions 会自动将最新代码（含新功能）部署到您的 Worker，同时保留您的密码设置。\n\n### 方式四：Docker部署\n\nRenewHelper 支持通过 Docker 进行一键私有化部署。该方案利用 Miniflare 在本地模拟 Cloudflare Workers 环境，配合 Node-cron 实现稳定的定时任务，确保数据完全掌握在您自己手中。\n\n#### 准备工作\n\n  * 服务器需安装 Docker 和 Docker Compose。\n\n#### 快速开始\n\n1.  VPS新建一个文件夹（例如 `renewhelper`）。\n2.  在文件夹中创建一个名为 `docker-compose.yml` 的文件，填入以下内容：\n\n```yaml\nservices:\n  renew-helper:\n    # 官方镜像地址\n    image: ieax/renewhelper:latest\n    container_name: renew-helper\n    restart: unless-stopped\n    ports:\n      - \"9787:9787\" # 将容器内部的 9787 端口映射到宿主机的 9787\n    volumes:\n      # 数据持久化：将宿主机的 ./data 目录挂载进去，防止重启丢失数据\n      - ./data:/data\n    environment:\n      # --- 核心配置 ---\n      \n      # 1. 登录密码 (必填)\n      - AUTH_PASSWORD=你的访问密码\n      \n      # 2. 定时任务频率 (关键配置)\n      # 建议：设置为每30分钟运行一次，不要修改！！！\n      # 语法：\"0,30 * * * *\" 表示在每小时的第0分和第30分各触发一次。\n      - CRON_SCHEDULE=0,30 * * * *\n      \n      # 3. 容器时区\n      # 决定了 Cron 什么时候\"醒来\"，建议设置为你所在的地区\n      - TZ=Asia/Shanghai\n```\n\n3.  启动服务：\n\n    ```bash\n    docker compose up -d\n    ```\n\n4.  打开浏览器访问：`http://你的服务器IP:9787`。为了安全地通过互联网访问 RenewHelper（例如 `https://renew.example.com`），建议配置反向代理。\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔒 进阶配置: 点击展开 Caddy 反代配置指南\u003c/strong\u003e\u003c/summary\u003e\n\n#### 1\\. 修改 `docker-compose.yml`\n\n请参照下方配置修改您的文件，添加 Caddy 服务。\n\n```yaml\nservices:\n  renew-helper:\n    image: ieax/renewhelper:latest\n    container_name: renew-helper\n    restart: unless-stopped\n    # 移除 ports 映射，只暴露端口给 Caddy，更安全\n    expose:\n      - \"9787\"\n    volumes:\n      - ./data:/data\n    environment:\n      - AUTH_PASSWORD=admin\n      - CRON_SCHEDULE=0,30 * * * *\n      - TZ=Asia/Shanghai\n\n  caddy:\n    image: caddy:alpine\n    container_name: caddy-proxy\n    restart: unless-stopped\n    ports:\n      - \"80:80\"   # HTTP\n      - \"443:443\" # HTTPS\n    volumes:\n      - ./Caddyfile:/etc/caddy/Caddyfile\n      - caddy_data:/data\n      - caddy_config:/config\n    depends_on:\n      - renew-helper\n\nvolumes:\n  caddy_data:\n  caddy_config:\n```\n\n#### 2\\. 创建 `Caddyfile`\n\n在项目根目录下创建一个名为 `Caddyfile` 的文件（注意没有后缀名）：\n\n```caddy\n# 请将此处替换为您解析好的域名\nyour-domain.com {\n    encode gzip\n    # renew-helper 是 docker 服务名，9787 是容器内部端口\n    reverse_proxy renew-helper:9787\n}\n```\n\n#### 3\\. 启动服务\n\n```bash\ndocker compose up -d\n```\n\n\u003e启动后，Caddy 会自动申请 SSL 证书，您可以通过 `https://您的域名` 安全访问服务。\n\u003c/details\u003e\n\n#### ⚠️ 重要提示：时区设置\n\n为了确保通知时间准确，请确保以下两处设置一致：\n\n1.  **Docker 环境变量 (`TZ`)**：决定了 RenewHelper 什么时候**醒来**执行检查。\n2.  **网页端 -\\\u003e 系统设置 -\\\u003e 偏好时区**：决定了 RenewHelper 醒来后，**认为现在是几点**。\n\n#### 💾 数据备份与迁移\n\n  * **数据位置**：所有数据（订阅列表、系统配置、日志）都保存在 `docker-compose.yml` 同级目录下的 `./data` 文件夹中。\n  * **备份**：直接复制或压缩 `./data` 文件夹即可。\n  * **迁移**：在通过 Docker 部署新实例时，将备份的 `./data` 文件夹放入目录，启动后数据会自动恢复。\n\n#### 🔄 更新版本\n\n当项目发布新版本时，执行以下命令即可更新：\n\n```bash\n# 1. 拉取最新镜像\ndocker compose pull\n\n# 2. 重建并重启容器\ndocker compose up -d\n```\n\n### Telegram 代理服务部署 (可选)\n\n\u003e ⚠️ **仅适用于中国大陆用户**：由于网络原因，国内服务器可能无法直接连接 Telegram API。您可以部署本项目提供的轻量级反代，同时兼容Worker/Pages/Snippets，建议部署方式：Snippets（无次数限制速度快） \u003e Pages（无次数限制） \u003e Worker（有次数限制）。\n\n1.  **准备文件**：复制本项目 `renewhelper/telegram_proxy/_worker.js` 的代码。\n2.  **创建 Worker/Pages/Snippets**：\n    *   在 Cloudflare 后台创建一个新的 Worker/Pages/Snippets（例如命名为 `tg-proxy`）。\n    *   粘贴代码并部署。\n3.  **配置白名单 (变量名: `TG_ALLOW_TOKENS`)**：\n    *   在 Worker/Pages 设置 -\u003e 变量中，添加 `TG_ALLOW_TOKENS`(Pages需要重新部署一遍生效)。\n    *   值填写您的 Bot Token（如果有多个用逗号分隔）。\n    *   *如果不配置环境变量，需手动修改代码中的 `WHITELIST_TOKENS` 常量。*\n4.  **使用**：\n    *   您的代理地址为：`https://tg-proxy.您的子域名.workers.dev` 或您的自定义域名。\n    *   此服务可作为 Telegram API 的透明代理，支持 `POST /bot\u003cToken\u003e/\u003cMethod\u003e` 格式的请求。\n    *   *注：此脚本主要用于解决 Docker 部署环境下或特定网络环境下无法访问 Telegram API 的问题。*\n\n### 🎉 部署完成！\n\n---\n\n## ⚙️ 设置与配置\n\n部署成功后，访问您的 Worker 域名或您添加的自定义域名（如 `https://renewhelper.your-name.workers.dev`或 `https://renewhelper.your-domain.com`）。\n\n1.  **首次登录**：使用您设置的 `AUTH_PASSWORD`（默认 `admin`）解锁。\n2.  **系统设置**：点击控制台右上角的 **系统设置 (SETTINGS)** 按钮。\n    - **时区设置**：非常重要！请选择您所在的时区（如 `Asia/Shanghai`），这决定了提醒和日历的准确性。\n    - **通知总开关**：开启后可配置具体的推送渠道。\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/configUI_darkCN_shotv3.png\" alt=\"RenewHelper 界面预览\" width=\"800\"\u003e\n\u003c/div\u003e\n\n### 📢 推送渠道配置说明\n\n在“系统设置” -\u003e “通知配置”区域，点击 **添加渠道** 按钮，选择类型并填写参数。系统支持同时配置**无限个**推送渠道。配置完成后支持**发送测试**以验证连通性。\n\n| 渠道              | 参数说明                                                           | 获取/配置方法                                                                                                                                                                                                                               |\n| :---------------- | :----------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **Telegram**      | **Token**: 机器人令牌\u003cbr\u003e**Chat ID**: 您的用户 ID 或群组 ID\u003cbr\u003e**Server**: (可选) 自定义 API 地址 | 1. 找 [@BotFather](https://t.me/BotFather) 创建机器人获取 Token。找`@userinfobot`获取UserID。\u003cbr\u003e2. 或浏览器访问 `https://api.telegram.org/bot\u003cYourToken\u003e/getUpdates` \u003cbr\u003e3. 添加您的机器人为好友，并发送任意消息给机器人。\u003cbr\u003e4. 在刚才打开的 URL 页面刷新获取 Chat ID。\u003cbr\u003e5. **Server**: 默认为 `https://api.telegram.org`。如需使用反代，请填入完整地址（如您的 [Telegram 反代服务](#telegram-代理服务部署-可选) URL`https://tg-proxy.your-name.pages.dev`）。 |\n| **Bark** (iOS)    | **Server**: 服务器地址\u003cbr\u003e**Device Key**: 设备密钥                 | 1. App Store 下载 Bark 应用。\u003cbr\u003e2. 复制 App 内显示的服务器地址和 Key。                                                                                                                                                                     |\n| **PushPlus**      | **Token**: 用户令牌                                                | 1. 访问 [PushPlus 官网](https://www.pushplus.plus/)。\u003cbr\u003e2. 微信扫码登录获取 Token。                                                                                                                                                        |\n| **NotifyX**       | **API Key**: 密钥                                                  | 1. 访问 [NotifyX 官网](https://www.notifyx.cn/)。 \u003cbr\u003e2. 微信扫码登录获取 API Key。                                                                                                                                                         |\n| **Resend** (邮件) | **API Key**: Resend 密钥\u003cbr\u003e**From**: 发件地址\u003cbr\u003e**To**: 收件地址 | 1. 注册 [Resend](https://resend.com/)。\u003cbr\u003e2. 绑定域名并获取 API Key。\u003cbr\u003e3. `From` 必须是您验证过的域名邮箱（如 `alert@yourdomain.com`）。若您没有域名邮箱，可以使用`onboarding@resend.dev`，发送至您注册 resend 账号的邮箱。              |\n| **Gotify**        | **Server**: 服务器地址\u003cbr\u003e**Token**: 应用 Token                    | 自建 Gotify 服务器，创建一个 Application 获取 Token。                                                                                                                                                                                                       |\n| **Ntfy**          | **Server**: 服务器 (默认 ntfy.sh)\u003cbr\u003e**Topic**: 主题\u003cbr\u003e**Token**: 令牌 | 1. **Server**: 若自建则填自建地址，否则留空默认为 `https://ntfy.sh`。\u003cbr\u003e2. **Topic**: 您订阅的主题名称。\u003cbr\u003e3. **Token**: (可选) 如果主题受保护，需填写 Access Token，否则留空。                                                                           |\n| **Webhook**       | **URL**: POST 地址                                                 | 适用于自定义开发。系统会向该 URL 发送 POST 请求：`{ \"title\": \"...\", \"content\": \"...\" }`。[WEBHOOK 配置教程](./webhook_guide_zh.md)                                                                                                                                                   |\n\n---\n\n## 🛠 使用方法\n\n### 添加服务\n\n- **名称**：服务的名称（如 \"Netflix 4K\"，\"Google Voice - 8888\"）。\n- **标签**：用于分类（如 `Media`, `Server`, `Domain`, `PhoneNumber`），支持多选。\n- **模式**：\n  - 📅 **循环订阅**：每隔固定周期（如 1 个月/1 个自然年/1 个农历年）到期的各种事项，如月付会员订阅、年付 VPS 续费等。\n  - ⏳ **到期重置**：到期后需手动或自动处理，有效期随之展期的各种事项，如 eSIM 动账延长 180 天有效期、签到增加服务时长等。\n- **农历开关**：开启后，周期将按农历计算（适合农历生日、事物提醒）。\n- **自动化策略**：\n  - **自动续期**：到期后自动将下次到期日顺延一个周期。\n  - **自动禁用**：到期超过指定天数未处理，自动标记为禁用。\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/AddUI_darkCN_shot.png\" alt=\"RenewHelper 界面预览\" width=\"600\"\u003e\n\u003c/div\u003e\n\n### 查看日志\n\n点击主界面的 **运行日志 (LOGS)** 按钮，可查看所有自动化任务的历史记录、推送结果以及操作审计。\n\n### ICS 日历订阅\n\n在“系统设置”中找到 **日历订阅** 区域。\n\n1.  复制订阅链接。\n2.  **iOS**: 设置 -\\\u003e 邮件 -\\\u003e 账户 -\\\u003e 添加账户 -\\\u003e 其他 -\\\u003e 添加已订阅的日历。\n3.  **Google Calendar**: 添加日历 -\\\u003e 来自 URL 或从订阅链接下载后文件导入。\n4.  **Outlook**: 文件 -\\\u003e 添加日历 -\\\u003e 从 WEB 订阅或从订阅链接下载后文件导入。\n5.  **手机自带日程 APP**: 在 CalDAV 服务商添加订阅链接，手机添加 CalDAV 订阅信息进行日程同步或从订阅链接下载后，在日程软件中导入。\n6.  **注意**: 链接包含安全 Token，请勿泄露。如泄露可点击“重置令牌”。\n\n### 💰 资金流向 (Billing Stats)\n\n点击主界面底部的切换按钮，进入 **资金流向看板**：\n\n1.  **月度趋势**：查看过去 12 个月的消费曲线。\n2.  **年度汇总**：查看近 3 年的年度总支出。\n3.  **账单 vs 实付**：\n    - **账单金额 (Bill Amount)**：基于服务设置的“固定价格”统计的应付金额。\n    - **实付金额 (Actual Cost)**：基于续费历史记录中实际填写的金额统计。\n4.  **多币种**：系统会自动查询实时汇率，将不同币种统一转换为您设置的“默认币种”进行汇总展示。\n\n### 📜 历史账单 (History Records)\n\n1.  **手动续费 (Renew)**：适合当期续费。系统会自动根据上一周期的结束时间推算下一次的起止时间填入。\n2.  **补录历史 (Add History)**：适合补录过去的账单。点击“切换为补录模式”，您可以手动添加任意时间段的账单记录。\n3.  **编辑记录**：点击右侧的“历史记录”按钮，可以查看并修正每一笔过往的账单详情（价格、日期、备注）。\n\n### 💾 数据迁移 (Data Migration)\n\n系统支持完整数据的导入导出，方便备份或迁移。\n\n1.  **导出 (Export)**：点击右上角菜单中的“导出数据”，并通过提供的安全链接下载 `.json` 备份文件。\n    *   *包含：所有服务列表、所有续费历史、系统设置。*\n    *   *不包含：敏感的 JWT Secret (导入时会自动保留新系统的 Secret)。*\n2.  **导入 (Import)**：在“系统设置”底部找到“导入数据”区域，粘贴备份文件的内容并提交。\n    *   *注意：导入操作是 **覆盖式** 的，建议导入前先备份当前数据。*\n\n### 🔄 升级旧数据\n\n如果您是从 v1.x 版本升级到 v3.x，数据结构是兼容的。\n\n1.  在旧版本中执行 **导出**，获取 `.json` 文件。\n2.  部署新版 Worker (覆盖 `_worker.js` 代码)。\n3.  在新版中 **导入** 刚才的备份文件。\n4.  系统会自动识别并兼容旧版数据，缺少的字段（如币种、历史记录）会使用默认值填充，旧版推送渠道会自动迁移。\n\n\n\n---\n\n## ⚠️ 注意事项\n\n1.  **数据安全**：所有数据存储在您的 Cloudflare KV 中, 建议定期手动导出 JSON 备份。\n2.  **免费版限制**：（Docker方式不受此限制）\n    - Cloudflare Workers 免费版每天限制 100,000 次请求。\n    - KV 每天写入限制 1,000 次。\n\n---\n\n## 🤝 贡献与支持\n\n如果您发现了 Bug 或有新功能建议，欢迎提交 Issue 或 Pull Request。\n\n### 💖 捐赠 (Donation)\n\n如果您觉得 RenewHelper 对您有帮助，欢迎请作者喝一杯咖啡 ☕️。您的支持是我持续更新的动力！\n\n**加密货币** - 国际用户\n\n| 币种 | 网络 (Network) | 地址 (Click to Copy) |\n| :--- | :--- | :--- |\n| **USDT** | **BSC (BEP20)** / Polygon / ETH | `0x0de4d19673cbdf954cfb83c0a48abb5ce8f6bf58` |\n\n\u003e ⚠️ 注意：此地址仅支持 EVM 兼容链 (以太坊/币安链/Polygon等)，请不要充值 TRC20 (波场) 资产！！！\n\n**爱发电** - 国内用户\n\n[![爱发电](https://img.shields.io/badge/爱发电-Afdian-946ce6?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://afdian.com/a/lostfree)\n\n---\n\n**License**: MIT\nCopyright (c) 2025-2026 LOSTFREE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fieax%2Frenewhelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fieax%2Frenewhelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fieax%2Frenewhelper/lists"}