218 lines
8.7 KiB
Markdown
218 lines
8.7 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is a Vue 3 Token Manager application for XYZW game automation. The application manages game tokens via Base64 decoding, establishes WebSocket connections, and provides a visual interface for token management and game automation.
|
|
|
|
## Development Commands
|
|
|
|
### Core Commands
|
|
```bash
|
|
# Development server (port 3000)
|
|
npm run dev
|
|
|
|
# Production build
|
|
npm run build
|
|
|
|
# Preview production build
|
|
npm run preview
|
|
|
|
# Lint Vue, JS, TS files with auto-fix
|
|
npm run lint
|
|
|
|
# Format code (Prettier)
|
|
npm run format
|
|
```
|
|
|
|
### Installation
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Architecture Overview
|
|
|
|
### Core System Design
|
|
The application is built around a **token-centric architecture** that replaces traditional user authentication:
|
|
|
|
1. **Token Management System**: Base64-encoded tokens are imported, decoded, and stored locally
|
|
2. **WebSocket Connection Layer**: Automatic WebSocket connections using BON protocol for game communication
|
|
3. **Local-First Storage**: All data stored in browser localStorage, no backend dependencies
|
|
4. **Protocol Layer**: Custom BON (Binary Object Notation) protocol for game message encoding/decoding
|
|
|
|
### Key Architectural Components
|
|
|
|
#### 1. Token Store (`src/stores/tokenStore.js`)
|
|
Central state management for token operations:
|
|
- **Token Lifecycle**: Import → Parse → Store → Select → Connect
|
|
- **Base64 Parsing**: Supports multiple formats (JSON, plain text, prefixed)
|
|
- **WebSocket Management**: Automatic connection establishment and status tracking
|
|
- **Data Persistence**: localStorage with cross-session state recovery
|
|
|
|
#### 2. BON Protocol Implementation (`src/utils/bonProtocol.js`)
|
|
Custom binary protocol for game communication:
|
|
- **Message Encoding/Decoding**: Binary serialization with type safety
|
|
- **Game Message Templates**: Predefined message structures for common operations
|
|
- **Encryption Layer**: Multi-channel encryption with XOR-based security
|
|
- **WebSocket Message Handling**: Structured message parsing and creation
|
|
|
|
#### 3. WebSocket Client (`src/utils/xyzwWebSocket.js`)
|
|
Enhanced WebSocket client based on reference implementation:
|
|
- **Command Registry**: Pre-registered game commands with default parameters
|
|
- **Queue Management**: Automatic message queuing and batch processing
|
|
- **Connection Management**: Auto-reconnection, heartbeat, and status monitoring
|
|
- **Promise Support**: Both fire-and-forget and request-response patterns
|
|
|
|
#### 4. Router Architecture (`src/router/index.js`)
|
|
Token-aware navigation system:
|
|
- **Access Control**: Route guards based on token availability
|
|
- **Smart Redirects**: Automatic routing based on token state
|
|
- **Legacy Compatibility**: Redirects from old authentication routes
|
|
|
|
### Data Flow Architecture
|
|
|
|
```
|
|
Token Import → Base64 Decode → Local Storage → Token Selection → WebSocket Connection → Game Communication
|
|
↑ ↓ ↓ ↓ ↓ ↓
|
|
User Input JSON/String Token Store Router Guards BON Protocol Game Messages
|
|
```
|
|
|
|
### State Management Pattern
|
|
|
|
**Pinia Store Structure**:
|
|
- `tokenStore`: Primary token management and WebSocket connections
|
|
- `auth`: Simplified authentication state (legacy compatibility)
|
|
- `gameRoles`: Role-specific game data management
|
|
- `localTokenManager`: Low-level token persistence utilities
|
|
|
|
## Key Framework Features
|
|
|
|
### Token Data Structure
|
|
```javascript
|
|
{
|
|
id: "token_xxx", // Unique identifier
|
|
name: "主号战士", // User-defined name
|
|
token: "base64_token", // Actual token string
|
|
wsUrl: "wss://...", // WebSocket endpoint
|
|
server: "风云服", // Game server
|
|
level: 85, // Character level
|
|
profession: "战士", // Character class
|
|
createdAt: "2024-...", // Creation timestamp
|
|
lastUsed: "2024-...", // Last usage timestamp
|
|
isActive: true // Activation status
|
|
}
|
|
```
|
|
|
|
### WebSocket Connection Flow
|
|
1. **Token Selection**: User selects token from management interface
|
|
2. **Base64 Parsing**: Extract actual game token from Base64 string
|
|
3. **URL Construction**: Build WebSocket URL with token parameter
|
|
4. **Client Creation**: Create `XyzwWebSocketClient` instance with game utilities
|
|
5. **Connection Establishment**: Automatic connection with heartbeat and queue setup
|
|
6. **Message Handling**: Bi-directional communication using command registry
|
|
|
|
### BON Protocol Message Format
|
|
```javascript
|
|
{
|
|
cmd: "command_name", // Command identifier
|
|
body: encodedData, // BON-encoded message body
|
|
ack: 0, // Acknowledgment number
|
|
seq: 12345, // Sequence number
|
|
time: 1234567890 // Timestamp
|
|
}
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
src/
|
|
├── components/
|
|
│ ├── TokenManager.vue # Primary token management interface
|
|
│ ├── DailyTaskCard.vue # Game task visualization
|
|
│ ├── MessageTester.vue # Protocol debugging tool
|
|
│ └── WebSocketTester.vue # Connection testing utility
|
|
├── stores/
|
|
│ ├── tokenStore.js # Core token management state
|
|
│ ├── auth.js # Legacy authentication compatibility
|
|
│ ├── gameRoles.js # Role-specific game data
|
|
│ └── localTokenManager.js # Token persistence utilities
|
|
├── utils/
|
|
│ ├── bonProtocol.js # BON protocol implementation
|
|
│ ├── gameCommands.js # Game-specific command helpers
|
|
│ └── wsAgent.js # WebSocket connection management
|
|
├── views/
|
|
│ ├── TokenImport.vue # Token import/management page
|
|
│ ├── Dashboard.vue # Main game control interface
|
|
│ ├── DailyTasks.vue # Task management interface
|
|
│ └── Profile.vue # User preferences and settings
|
|
└── router/index.js # Token-aware routing configuration
|
|
```
|
|
|
|
## Development Guidelines
|
|
|
|
### Working with Tokens
|
|
- Always use the `tokenStore` for token operations
|
|
- Test Base64 parsing with various input formats
|
|
- Verify WebSocket connections after token operations
|
|
- Handle token validation errors gracefully
|
|
|
|
### WebSocket Development
|
|
- Use the new `XyzwWebSocketClient` class for WebSocket connections
|
|
- Send messages with `client.send(cmd, params)` or `client.sendWithPromise(cmd, params)`
|
|
- Monitor connection status via `tokenStore.getWebSocketStatus(tokenId)`
|
|
- WebSocket client includes automatic reconnection, queued sending, and heartbeat management
|
|
- Built-in command registry supports game-specific message formats
|
|
|
|
### State Management
|
|
- Access token data through computed properties (`selectedToken`, `hasTokens`)
|
|
- Use reactive WebSocket status via `getWebSocketStatus(tokenId)`
|
|
- Persist critical state changes to localStorage automatically
|
|
- Handle cross-session state recovery on application startup
|
|
|
|
### Protocol Implementation
|
|
- Follow BON encoding/decoding patterns for message handling
|
|
- Use predefined `GameMessages` templates for common operations
|
|
- Implement proper type checking for message validation
|
|
- Handle protocol errors with fallback to JSON parsing
|
|
|
|
## Configuration Notes
|
|
|
|
### Vite Configuration
|
|
- Path aliases configured for clean imports (`@/`, `@components/`, etc.)
|
|
- Development server runs on port 3000
|
|
- Proxy configured for `/api` routes to `http://xyzw.my`
|
|
- SCSS preprocessing with global variables
|
|
|
|
### Browser Compatibility
|
|
- Requires modern browser with WebSocket support
|
|
- localStorage required for token persistence
|
|
- Base64 decoding and TextEncoder/TextDecoder APIs used
|
|
|
|
### Security Considerations
|
|
- All tokens stored locally in browser storage
|
|
- WebSocket connections use WSS encryption
|
|
- BON protocol includes basic XOR encryption
|
|
- Token display masked (shows only first/last 4 characters)
|
|
|
|
## Testing and Debugging
|
|
|
|
### Built-in Testing Tools
|
|
- **MessageTester.vue**: Test BON protocol message encoding/decoding
|
|
- **WebSocketTester.vue**: Debug WebSocket connections and message flow
|
|
- Browser DevTools WebSocket monitoring for connection debugging
|
|
|
|
### Common Development Tasks
|
|
- Test token import with various Base64 formats
|
|
- Verify WebSocket connection establishment with new client architecture
|
|
- Debug game command sending using command registry
|
|
- Test Promise-based message responses
|
|
- Validate route guards and navigation flow
|
|
- Test localStorage persistence across sessions
|
|
|
|
### Key API Changes
|
|
- `tokenStore.sendMessage(tokenId, cmd, params)` - Send game commands
|
|
- `tokenStore.sendMessageWithPromise(tokenId, cmd, params)` - Send with response
|
|
- `tokenStore.getWebSocketClient(tokenId)` - Get client instance
|
|
- WebSocket client provides `send()`, `sendWithPromise()`, and game-specific methods
|
|
- Built-in commands: `getRoleInfo()`, `signIn()`, `claimDailyReward()`, etc. |