Skip to content

Commit 1bcb33d

Browse files
committed
feat: 添加版本更新检测和24小时提醒抑制功能
新增功能: - 添加版本更新检测功能(useVersionCheck hook) - GitHub API 集成获取最新版本 - 5 分钟智能缓存避免频繁请求 - LoginPrompt 页面显示版本信息和 GitHub 图标 - 登录后显示更新提示横幅 优化改进: - 更新提示横幅采用极简单行设计 - "稍后提醒"按钮24小时持久化抑制 - 清理开发调试日志,保留错误日志 技术改进: - 新增 hooks/useVersionCheck.ts - LocalStorage 缓存策略 - 语义化版本比较 - 24小时抑制机制
1 parent a64c055 commit 1bcb33d

20 files changed

+656
-121
lines changed

CHANGELOG.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,38 @@
1313
- 套餐使用统计图表
1414
- 通知提醒功能
1515

16+
## [1.0.3] - 2025-12-10
17+
18+
### 新增
19+
- ✨ 版本更新检测功能
20+
- 自动检测 GitHub 最新版本
21+
- 未登录状态下也可查看当前版本
22+
- 登录后显示更新提示横幅
23+
- 5 分钟智能缓存避免频繁请求
24+
- ✨ LoginPrompt 页面版本信息展示
25+
- 显示当前扩展版本号
26+
- GitHub 图标快速跳转
27+
- 新版本可用时显示提示
28+
29+
### 优化
30+
- ⚡ 登录地址简化,访问更直接
31+
- 🔧 内部配置结构优化,提升扩展稳定性
32+
- 🎨 更新提示横幅采用极简单行设计
33+
- 移除冗余描述文字,节省弹窗空间
34+
- "前往更新"按钮直接跳转 GitHub Release
35+
- "稍后提醒"按钮替代关闭图标,更友好
36+
- 点击后24小时内不再提醒
37+
38+
### 修复
39+
- 🐛 修复配置文件冲突问题,确保扩展正常运行
40+
41+
### 技术改进
42+
- 🏗️ 新增 `hooks/useVersionCheck.ts` Hook
43+
- GitHub API 集成
44+
- LocalStorage 缓存策略
45+
- 语义化版本比较
46+
- 错误处理和日志记录
47+
1648
## [1.0.2] - 2025-01-12
1749

1850
### 新增
@@ -146,7 +178,8 @@
146178

147179
---
148180

149-
[Unreleased]: https://github.com/yourusername/88code-cost/compare/v1.0.2...HEAD
181+
[Unreleased]: https://github.com/yourusername/88code-cost/compare/v1.0.3...HEAD
182+
[1.0.3]: https://github.com/yourusername/88code-cost/compare/v1.0.2...v1.0.3
150183
[1.0.2]: https://github.com/yourusername/88code-cost/compare/v1.0.1...v1.0.2
151184
[1.0.1]: https://github.com/yourusername/88code-cost/compare/v1.0.0...v1.0.1
152185
[1.0.0]: https://github.com/yourusername/88code-cost/releases/tag/v1.0.0

DEVELOPMENT.md

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,93 @@ pnpm test
3030
4. 点击"加载已解压的扩展程序"
3131
5. 选择 `build/chrome-mv3-dev` 目录
3232

33+
## 环境配置
34+
35+
### 配置文件位置
36+
37+
所有域名和 URL 配置集中在 `lib/config/env.ts` 文件中:
38+
39+
```typescript
40+
export const ENV = {
41+
// 基础域名
42+
BASE_DOMAIN: "88code.ai",
43+
44+
// API 基础 URL
45+
API_BASE_URL: "https://www.88code.ai",
46+
47+
// 网站 URL
48+
WEBSITE_URL: "https://www.88code.ai",
49+
LOGIN_URL: "https://www.88code.ai/user/login",
50+
51+
// Content Script 匹配模式
52+
CONTENT_SCRIPT_MATCHES: [
53+
"https://www.88code.ai/*",
54+
"https://88code.ai/*"
55+
] as const,
56+
57+
// 环境标识
58+
isDevelopment: process.env.NODE_ENV === "development",
59+
isProduction: process.env.NODE_ENV === "production"
60+
} as const
61+
```
62+
63+
### 修改域名配置
64+
65+
如果需要修改域名(例如从 88code.ai 改为其他域名):
66+
67+
1. **打开配置文件**`lib/config/env.ts`
68+
69+
2. **修改相关配置**
70+
```typescript
71+
export const ENV = {
72+
BASE_DOMAIN: "your-domain.com", // 修改基础域名
73+
API_BASE_URL: "https://your-domain.com", // 修改 API URL
74+
WEBSITE_URL: "https://your-domain.com", // 修改网站 URL
75+
LOGIN_URL: "https://your-domain.com/user/login", // 修改登录 URL
76+
CONTENT_SCRIPT_MATCHES: [
77+
"https://your-domain.com/*",
78+
"https://your-domain.com/*"
79+
] as const,
80+
// ...
81+
}
82+
```
83+
84+
3. **重新构建扩展**
85+
```bash
86+
pnpm build
87+
```
88+
89+
**注意**:只需修改 `lib/config/env.ts` 一个文件,所有引用该配置的地方会自动更新。
90+
91+
### 配置说明
92+
93+
| 配置项 | 说明 | 使用位置 |
94+
|--------|------|----------|
95+
| `BASE_DOMAIN` | 基础域名 | 用于域名判断和 cookie 配置 |
96+
| `API_BASE_URL` | API 基础 URL | 所有 API 请求的基础路径 |
97+
| `WEBSITE_URL` | 网站首页 URL | EmptyState 组件的登录引导 |
98+
| `LOGIN_URL` | 登录页面 URL | LoginPrompt 组件的登录跳转 |
99+
| `CONTENT_SCRIPT_MATCHES` | Content Script 匹配模式 | 确定 content script 在哪些页面注入 |
100+
| `isDevelopment` | 开发环境标识 | 控制调试工具和日志输出 |
101+
| `isProduction` | 生产环境标识 | 控制生产环境行为 |
102+
33103
## 测试接口对接
34104

35105
### 准备工作
36106

37-
1. **访问 88code.org 并登录**
38-
- 打开 https://www.88code.org
107+
1. **访问 88code.ai 并登录**
108+
- 打开 https://www.88code.ai
39109
- 使用您的账号登录
40110
- 确保登录成功
41111

42112
2. **设置 authToken(临时测试方法)**
43113

44114
由于扩展需要从网站的 storage 读取 authToken,目前有两种方式设置:
45115

46-
#### 方法一:在 88code.org 网站控制台设置
116+
#### 方法一:在 88code.ai 网站控制台设置
47117

48118
```javascript
49-
// 在 88code.org 网站的控制台执行
119+
// 在 88code.ai 网站的控制台执行
50120
chrome.storage.local.set({ authToken: 'your-token-here' })
51121
```
52122

@@ -135,7 +205,7 @@ pnpm test
135205
- API 服务器拒绝请求
136206

137207
**解决方法**
138-
- 重新登录 88code.org
208+
- 重新登录 88code.ai
139209
- 重新设置 authToken
140210
- 检查控制台日志
141211

@@ -146,7 +216,7 @@ pnpm test
146216
```json
147217
"manifest": {
148218
"host_permissions": [
149-
"https://www.88code.org/*"
219+
"https://www.88code.ai/*"
150220
]
151221
}
152222
```

PROJECT_SUMMARY.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 项目概览
44

5-
本项目是一个轻巧的浏览器扩展,用于监控 88code.org 网站的计费系统。项目基于 Plasmo 框架,使用 React + TypeScript + Tailwind CSS 构建,界面风格参考了 PackyCode Cost Monitor 项目。
5+
本项目是一个轻巧的浏览器扩展,用于监控 88code.ai 网站的计费系统。项目基于 Plasmo 框架,使用 React + TypeScript + Tailwind CSS 构建,界面风格参考了 PackyCode Cost Monitor 项目。
66

77
## 核心功能
88

@@ -114,7 +114,7 @@ headers["Authorization"] = `Bearer ${authToken}`
114114
- 提供手动刷新和自动刷新(30秒)功能
115115

116116
#### 2. Content Script(网站数据访问)
117-
- **注入位置**: `https://www.88code.org/*`
117+
- **注入位置**: `https://www.88code.ai/*`
118118
- **执行时机**: 页面加载完成后(`document_end`
119119
- **核心职责**:
120120
- 访问网站的 `localStorage` 读取 authToken 和主题设置
@@ -152,7 +152,7 @@ chrome.storage 中有缓存?
152152
153153
Background Worker 接收请求
154154
155-
使用 tabs.sendMessage 向 88code.org 标签页发送请求
155+
使用 tabs.sendMessage 向 88code.ai 标签页发送请求
156156
157157
Content Script (auth-handler.ts) 接收消息
158158
@@ -168,7 +168,7 @@ chrome.storage 中有缓存?
168168
169169
返回 token 给 Popup
170170
171-
[如果所有步骤都失败] → 提示用户登录 88code.org
171+
[如果所有步骤都失败] → 提示用户登录 88code.ai
172172
```
173173

174174
**Token 搜索策略** (`contents/auth-handler.ts`):
@@ -196,7 +196,7 @@ API 函数从 chrome.storage 读取缓存的 authToken
196196
197197
构造 HTTP 请求(添加 Bearer Token 认证头)
198198
199-
发送请求到 88code.org API
199+
发送请求到 88code.ai API
200200
201201
接收 API 响应数据
202202
@@ -216,7 +216,7 @@ UI 展示最新数据
216216
#### 主题同步流程
217217

218218
```
219-
88code.org 网站主题变化
219+
88code.ai 网站主题变化
220220
221221
Content Script (theme-sync.ts) 的 MutationObserver 检测到变化
222222
@@ -242,7 +242,7 @@ Background Worker 注册两个 chrome.alarms:
242242
243243
Alarm 触发 Background Worker
244244
245-
调用 88code.org API 重置套餐额度
245+
调用 88code.ai API 重置套餐额度
246246
247247
清除相关缓存(dashboard_cache, subscriptions_cache)
248248
@@ -278,7 +278,7 @@ Alarm 触发 Background Worker
278278
│ Content Script 可以访问
279279
280280
┌─────────────────────┐
281-
│ 88code.org 网站 │
281+
│ 88code.ai 网站
282282
│ - localStorage │
283283
│ - DOM 元素 │
284284
│ - 网站主题 │
@@ -306,7 +306,7 @@ Alarm 触发 Background Worker
306306
- 加载 `build/chrome-mv3-dev` 目录
307307

308308
4. **设置 authToken**
309-
- 方法 1: 在 88code.org 控制台设置
309+
- 方法 1: 在 88code.ai 控制台设置
310310
- 方法 2: 临时硬编码到 `lib/storage/index.ts`
311311

312312
5. **测试功能**
@@ -335,7 +335,7 @@ Alarm 触发 Background Worker
335335
- 优化加载状态提示
336336

337337
4. **✅ 主题同步**
338-
- 自动从 88code.org 网站同步主题
338+
- 自动从 88code.ai 网站同步主题
339339
- 实时监听网站主题变化(MutationObserver)
340340
- 深色/浅色模式自动切换
341341

README.md

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@
162162
### 首次使用
163163

164164
#### 步骤 1:登录 88Code
165-
1. 访问 [88code.org](https://www.88code.org)
165+
1. 访问 [88code.ai](https://www.88code.ai)
166166
2. 使用您的账号登录
167167
3. 确保登录状态有效(不要退出登录)
168168

@@ -221,7 +221,7 @@
221221
支持三种主题模式:
222222
1. **浅色模式**:白色背景,适合白天使用
223223
2. **深色模式**:黑色背景,适合夜间使用
224-
3. **跟随88code**:自动跟随 88code.org 网站的主题
224+
3. **跟随88code**:自动跟随 88code.ai 网站的主题
225225

226226
**切换方法:**
227227
- 点击右上角的主题按钮
@@ -276,15 +276,15 @@
276276
<summary><strong>Q: 为什么显示"未登录"?</strong></summary>
277277

278278
**A:** 请确保:
279-
1. 已在 [88code.org](https://www.88code.org) 登录
279+
1. 已在 [88code.ai](https://www.88code.ai) 登录
280280
2. 刷新扩展或重新打开
281281
3. 如果问题持续,请尝试退出重新登录 88Code 网站
282282
</details>
283283

284284
<details>
285285
<summary><strong>Q: 扩展如何获取我的登录信息?</strong></summary>
286286

287-
**A:** 扩展会自动从 88code.org 网站读取您的认证信息(Token),所有数据均存储在本地,不会上传到任何第三方服务器。
287+
**A:** 扩展会自动从 88code.ai 网站读取您的认证信息(Token),所有数据均存储在本地,不会上传到任何第三方服务器。
288288
</details>
289289

290290
### 数据相关
@@ -415,6 +415,50 @@ pnpm dev:firefox
415415
- Chrome/Edge 会自动重载扩展
416416
- Firefox 需要手动刷新(点击"重新加载"按钮)
417417

418+
### 环境配置
419+
420+
#### 集中式配置
421+
422+
本扩展采用集中式配置架构,所有域名和 URL 配置都统一管理在 `lib/config/env.ts` 文件中。
423+
424+
**默认配置:**
425+
- 扩展默认配置为 `88code.ai` 域名
426+
- 如需自定义域名(如私有部署),仅需修改一个配置文件
427+
428+
**配置文件位置:**
429+
```
430+
lib/config/env.ts
431+
```
432+
433+
**修改域名步骤:**
434+
435+
1. 打开 `lib/config/env.ts` 文件
436+
2. 修改相关配置项:
437+
```typescript
438+
export const ENV = {
439+
BASE_DOMAIN: "your-domain.com",
440+
API_BASE_URL: "https://your-domain.com",
441+
WEBSITE_URL: "https://your-domain.com",
442+
LOGIN_URL: "https://your-domain.com/user/login",
443+
CONTENT_SCRIPT_MATCHES: [
444+
"https://your-domain.com/*",
445+
"https://your-domain.com/*"
446+
] as const,
447+
// ...
448+
}
449+
```
450+
3. 重新构建扩展:
451+
```bash
452+
pnpm build
453+
```
454+
455+
**优势:**
456+
- ✅ 单文件修改 - 域名变更只需修改一处
457+
- ✅ 类型安全 - TypeScript 严格类型推断
458+
- ✅ 零遗漏 - 所有引用自动更新
459+
460+
更多技术细节请参考 [DEVELOPMENT.md](DEVELOPMENT.md)[CLAUDE.md](CLAUDE.md)
461+
418462
### 构建生产版本
419463

420464
#### 构建单个平台
@@ -654,7 +698,7 @@ git push origin feature/your-feature-name
654698

655699
## 相关链接
656700

657-
- [88Code 官网](https://www.88code.org)
701+
- [88Code 官网](https://www.88code.ai)
658702
- [问题反馈](../../issues)
659703
- [更新日志](CHANGELOG.md)
660704
- [发布记录](../../releases)
@@ -670,7 +714,7 @@ git push origin feature/your-feature-name
670714
<div align="center">
671715
<p><strong>由 88Code 团队打造</strong></p>
672716
<p>
673-
<a href="https://www.88code.org">官网</a> ·
717+
<a href="https://www.88code.ai">官网</a> ·
674718
<a href="../../issues">反馈问题</a> ·
675719
<a href="../../releases">下载更新</a>
676720
</p>

background.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
getAuthTokenFromStorage
2828
} from "~/lib/storage"
2929
import { backgroundLogger } from "~/lib/utils/logger"
30+
import { API_BASE_URL } from "~/lib/api/config"
3031
import type {
3132
AppSettings,
3233
DashboardData,
@@ -266,7 +267,7 @@ async function getAuthToken(): Promise<string | null> {
266267
*/
267268
async function getSubscriptions(token: string): Promise<Subscription[]> {
268269
try {
269-
const response = await fetch("https://www.88code.org/admin-api/cc-admin/system/subscription/my", {
270+
const response = await fetch(`${API_BASE_URL}/admin-api/cc-admin/system/subscription/my`, {
270271
headers: {
271272
"Authorization": `Bearer ${token}`,
272273
"Content-Type": "application/json"
@@ -323,6 +324,15 @@ async function performReset(
323324

324325
if (result.success) {
325326
backgroundLogger.info(`✓ 订阅 ${subscription.subscriptionPlanName} 重置成功`)
327+
328+
// 立即刷新数据缓存
329+
backgroundLogger.info("重置成功,立即刷新数据缓存...")
330+
try {
331+
await executeAllTasks()
332+
backgroundLogger.info("✓ 数据刷新完成")
333+
} catch (err) {
334+
backgroundLogger.error("数据刷新失败:", err)
335+
}
326336
} else {
327337
backgroundLogger.error(
328338
`✗ 订阅 ${subscription.subscriptionPlanName} 重置失败:`,

0 commit comments

Comments
 (0)