0xYYBB | ZYY | Bobo
5fec086434
fix(web): add auth guards to prevent unauthorized API calls ( #934 )
...
Add `user && token` guard to all authenticated SWR calls to prevent
requests with `Authorization: Bearer null` when users refresh the page
before AuthContext finishes loading the token from localStorage.
## Problem
When users refresh the page:
1. React components mount immediately
2. SWR hooks fire API requests
3. AuthContext is still loading token from localStorage
4. Requests sent with `Authorization: Bearer null`
5. Backend returns 401 errors
This causes:
- Unnecessary 401 errors in backend logs
- Error messages in browser console
- Poor user experience on page refresh
## Solution
Add auth check to SWR key conditions using pattern:
```typescript
user && token && condition ? key : null
```
When `user` or `token` is null, SWR key becomes `null`, preventing the request.
Once AuthContext loads, SWR automatically revalidates and fetches data.
## Changes
**TraderDashboard.tsx** (5 auth guards added):
- status: `user && token && selectedTraderId ? 'status-...' : null`
- account: `user && token && selectedTraderId ? 'account-...' : null`
- positions: `user && token && selectedTraderId ? 'positions-...' : null`
- decisions: `user && token && selectedTraderId ? 'decisions/...' : null`
- stats: `user && token && selectedTraderId ? 'statistics-...' : null`
**EquityChart.tsx** (2 auth guards added + useAuth import):
- Import `useAuth` from '../contexts/AuthContext'
- Add `const { user, token } = useAuth()`
- history: `user && token && traderId ? 'equity-history-...' : null`
- account: `user && token && traderId ? 'account-...' : null`
**apiGuard.test.ts** (new file, 370 lines):
- Comprehensive unit tests covering all auth guard scenarios
- Tests for null user, null token, valid auth states
- Tests for all 7 SWR calls (5 in TraderDashboard + 2 in EquityChart)
## Testing
- ✅ TypeScript compilation passed
- ✅ Vite build passed (2.81s)
- ✅ All modifications are additive (no logic changes)
- ✅ SWR auto-revalidation ensures data loads after auth completes
## Benefits
1. **No more 401 errors on refresh**: Auth guards prevent premature requests
2. **Cleaner logs**: Backend no longer receives invalid Bearer null requests
3. **Better UX**: No error flashes in console on page load
4. **Consistent pattern**: All authenticated endpoints use same guard logic
## Context
This PR supersedes closed PR #881 , which had conflicts due to PR #872
(frontend refactor with React Router). This implementation is based on
the latest upstream/dev with the new architecture.
Related: PR #881 (closed), PR #872 (Frontend Refactor)
Co-authored-by: the-dev-z <the-dev-z@users.noreply.github.com >
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-12 17:56:36 +08:00
SkywalkerJi
cc6dc8edaa
Resolved front-end linting issues. ( #533 )
2025-11-05 20:41:41 +08:00
Icyoung
0da42bd1fd
Merge branch 'dev' into fix/bug-fixes-collection-v2
2025-11-05 15:56:58 +08:00
Ember
b79878ab36
feat: add ESLint and Prettier with pre-commit hook
...
- Install ESLint 9 with TypeScript and React support
- Install Prettier with custom configuration (no semicolons)
- Add husky and lint-staged for pre-commit hooks
- Configure lint-staged to auto-fix and format on commit
- Relax ESLint rules to avoid large-scale code changes
- Format all existing code with Prettier (no semicolons)
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
2025-11-05 11:41:14 +08:00
ZhouYongyou
96d59e6241
fix: 修復初始余額顯示錯誤(使用當前淨值而非配置值)
...
問題:
- 圖表顯示「初始余額 693.15 USDT」(實際應該是 600)
- 原因:使用 validHistory[0].total_equity(當前淨值)
- 導致初始余額隨著盈虧變化,數學邏輯錯誤
修復:
- 優先從 account.initial_balance 讀取真實配置值
- 備選方案:從歷史數據反推(淨值 - 盈虧)
- 默認值使用 1000(與創建交易員時的默認配置一致)
測試:
- 初始余額:600 USDT(固定)
- 當前淨值:693.15 USDT
- 盈虧:+93.15 USDT (+15.52%) ✓
2025-11-04 17:35:26 +08:00
icy
4c74465075
Add NOFX watermarks to charts and fix empty state internationalization
...
- Add NOFX watermark to ComparisonChart (competition page)
- Add NOFX watermark to EquityChart (dashboard page)
- Fix empty state handling and internationalization in CompetitionPage
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
2025-11-04 02:08:38 +08:00
Ember
899add597a
feat: enhance UI with Lucide icons across various components
...
- add logo
- Replaced emoji placeholders with Lucide icons in AITradersPage, CompetitionPage, EquityChart, Header, LoginPage, and RegisterPage for improved visual consistency.
- Updated button styles to include icons for actions like adding models and exchanges.
- Enhanced error and empty state displays with relevant icons to provide better user feedback.
2025-10-31 23:28:19 +08:00
SkywalkerJi
01add7037a
Reduce the request frequency to the Binance API and add backend caching.
2025-10-30 14:01:06 +08:00
SkywalkerJi
b39efdac27
Smooth the account equity curve.
2025-10-30 12:53:27 +08:00
SkywalkerJi
7208debb11
Optimize mobile display to prevent selection boxes from exceeding the screen boundaries.
2025-10-30 12:08:39 +08:00
sue
3b4a4d34aa
fix: 修复配置硬编码问题
...
## 修复内容
### 1. AI决策杠杆配置动态化 (decision/engine.go)
- **问题**: System Prompt 中硬编码 50x/20x 杠杆,导致 AI 生成的决策不符合用户配置(5x)
- **修复**:
- buildSystemPrompt() 新增 btcEthLeverage, altcoinLeverage 参数
- System Prompt 文本使用动态杠杆值(第225-226行)
- 示例 JSON 使用配置杠杆值(第299行)
- 调用时传入实际配置值(第100行)
- **影响**: AI 现在会根据用户配置的杠杆限制生成决策
### 2. 前端初始余额显示优化 (web/src/components/EquityChart.tsx)
- **问题**: 初始余额硬编码为 1000 USDT,与用户配置的 100 USDT 不符
- **修复**: 实现三级回退机制
1. 优先使用历史数据第一个点的 total_equity
2. 备用使用当前账户 account.total_equity
3. 最后使用默认值 100(匹配常见配置)
- **影响**: 前端显示的初始余额现在与实际配置一致
## 技术细节
**函数签名变更**:
```go
// 修改前
func buildSystemPrompt(accountEquity float64) string
// 修改后
func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage int) string
```
**React 状态优化**:
```typescript
// 修改前
const initialBalance = history[0]?.total_equity || 1000;
// 修改后
const initialBalance = history[0]?.total_equity || account?.total_equity || 100;
```
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
2025-10-30 02:43:14 +08:00
tinkle-community
8a26b8161b
Feature: Add multi-language support and UI improvements
...
- Add language context and translation system (Chinese/English)
- Enhance UI components with i18n support
- Update AILearning, EquityChart, and CompetitionPage
- Add language toggle in header
- Improve user experience with localized text
2025-10-28 22:25:36 +08:00
tinkle-community
a726702302
Update: Merge nofx improvements
...
- Frontend trading records and UI enhancements
- Optimized AI prompts and decision engine
- Performance analysis and comparison features
- Binance-style UI improvements
2025-10-28 21:45:28 +08:00
tinkle-community
5aa50d35d7
Initial commit: NOFX AI Trading System
...
- Multi-AI competition mode (Qwen vs DeepSeek)
- Binance Futures integration
- AI self-learning mechanism
- Professional web dashboard
- Complete risk management system
2025-10-28 15:47:34 +08:00