From 498849dc1e57b657bde3967b48beea348fbdd187 Mon Sep 17 00:00:00 2001 From: steve <1050403040@qq.com> Date: Fri, 22 Aug 2025 17:30:53 +0800 Subject: [PATCH] Initial public release --- .eslintrc.js | 25 + .gitignore | 64 + CHANGELOG.md | 70 + CLAUDE.md | 218 + LICENSE | 42 + LOCAL_TOKEN_CHANGES.md | 143 + README.md | 477 +++ TOKEN_MANAGEMENT_UPDATE.md | 147 + index.html | 41 + package-lock.json | 3586 +++++++++++++++++ package.json | 44 + public/1733492491706148.png | Bin 0 -> 15441 bytes public/1733492491706152.png | Bin 0 -> 36515 bytes public/1736425783912140.png | Bin 0 -> 26283 bytes public/173746572831736.png | Bin 0 -> 38673 bytes public/174023274867420.png | Bin 0 -> 16030 bytes public/174061875626614.png | Bin 0 -> 17842 bytes public/IMG_8007.JPG | Bin 0 -> 113993 bytes ...rzmHiJcbab2c25af264d0758b527bc1b61cc3b.png | Bin 0 -> 2660 bytes public/icons/1733492491706148.png | Bin 0 -> 15441 bytes public/icons/1733492491706152.png | Bin 0 -> 36515 bytes public/icons/1736425783912140.png | Bin 0 -> 26283 bytes public/icons/173746572831736.png | Bin 0 -> 38673 bytes public/icons/174023274867420.png | Bin 0 -> 16030 bytes public/icons/174061875626614.png | Bin 0 -> 17842 bytes ...rzmHiJcbab2c25af264d0758b527bc1b61cc3b.png | Bin 0 -> 2660 bytes public/icons/ta.png | Bin 0 -> 11787 bytes public/icons/xiaoyugan.png | Bin 0 -> 6245 bytes public/ta.png | Bin 0 -> 11787 bytes public/xiaoyugan.png | Bin 0 -> 6245 bytes src/App.vue | 78 + src/api/index.js | 134 + src/assets/styles/global.scss | 314 ++ src/assets/styles/variables.scss | 102 + src/components/DailyTaskCard.vue | 582 +++ src/components/DailyTaskStatus.vue | 751 ++++ src/components/GameStatus.vue | 673 ++++ src/components/MessageTester.vue | 319 ++ src/components/TeamStatus.vue | 454 +++ src/components/TokenManager.vue | 507 +++ src/components/TowerStatus.vue | 404 ++ src/components/WebSocketTester.vue | 496 +++ src/main.js | 17 + src/router/index.js | 137 + src/stores/auth.js | 158 + src/stores/gameRoles.js | 204 + src/stores/localTokenManager.js | 454 +++ src/stores/tokenStore.js | 792 ++++ src/utils/bonProtocol.js | 779 ++++ src/utils/gameCommands.js | 692 ++++ src/utils/readable-xyzw-ws.js | 547 +++ src/utils/wsAgent.js | 438 ++ src/utils/xyzwWebSocket.js | 537 +++ src/views/DailyTasks.vue | 759 ++++ src/views/Dashboard.vue | 840 ++++ src/views/GameFeatures.vue | 570 +++ src/views/GameRoles.vue | 575 +++ src/views/Home.vue | 605 +++ src/views/Login.vue | 554 +++ src/views/NotFound.vue | 116 + src/views/Profile.vue | 558 +++ src/views/Register.vue | 333 ++ src/views/TokenImport.vue | 1044 +++++ vite.config.js | 36 + 64 files changed, 20416 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 CLAUDE.md create mode 100644 LICENSE create mode 100644 LOCAL_TOKEN_CHANGES.md create mode 100644 README.md create mode 100644 TOKEN_MANAGEMENT_UPDATE.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/1733492491706148.png create mode 100644 public/1733492491706152.png create mode 100644 public/1736425783912140.png create mode 100644 public/173746572831736.png create mode 100644 public/174023274867420.png create mode 100644 public/174061875626614.png create mode 100644 public/IMG_8007.JPG create mode 100644 public/Ob7pyorzmHiJcbab2c25af264d0758b527bc1b61cc3b.png create mode 100644 public/icons/1733492491706148.png create mode 100644 public/icons/1733492491706152.png create mode 100644 public/icons/1736425783912140.png create mode 100644 public/icons/173746572831736.png create mode 100644 public/icons/174023274867420.png create mode 100644 public/icons/174061875626614.png create mode 100644 public/icons/Ob7pyorzmHiJcbab2c25af264d0758b527bc1b61cc3b.png create mode 100644 public/icons/ta.png create mode 100644 public/icons/xiaoyugan.png create mode 100644 public/ta.png create mode 100644 public/xiaoyugan.png create mode 100644 src/App.vue create mode 100644 src/api/index.js create mode 100644 src/assets/styles/global.scss create mode 100644 src/assets/styles/variables.scss create mode 100644 src/components/DailyTaskCard.vue create mode 100644 src/components/DailyTaskStatus.vue create mode 100644 src/components/GameStatus.vue create mode 100644 src/components/MessageTester.vue create mode 100644 src/components/TeamStatus.vue create mode 100644 src/components/TokenManager.vue create mode 100644 src/components/TowerStatus.vue create mode 100644 src/components/WebSocketTester.vue create mode 100644 src/main.js create mode 100644 src/router/index.js create mode 100644 src/stores/auth.js create mode 100644 src/stores/gameRoles.js create mode 100644 src/stores/localTokenManager.js create mode 100644 src/stores/tokenStore.js create mode 100644 src/utils/bonProtocol.js create mode 100644 src/utils/gameCommands.js create mode 100644 src/utils/readable-xyzw-ws.js create mode 100644 src/utils/wsAgent.js create mode 100644 src/utils/xyzwWebSocket.js create mode 100644 src/views/DailyTasks.vue create mode 100644 src/views/Dashboard.vue create mode 100644 src/views/GameFeatures.vue create mode 100644 src/views/GameRoles.vue create mode 100644 src/views/Home.vue create mode 100644 src/views/Login.vue create mode 100644 src/views/NotFound.vue create mode 100644 src/views/Profile.vue create mode 100644 src/views/Register.vue create mode 100644 src/views/TokenImport.vue create mode 100644 vite.config.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..671e312 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + root: true, + env: { + node: true, + browser: true, + es2022: true + }, + extends: [ + 'eslint:recommended', + 'plugin:vue/vue3-recommended' + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module' + }, + rules: { + 'no-console': 'warn', + 'no-debugger': 'warn', + 'vue/multi-word-component-names': 'off', + 'no-unused-vars': 'warn' + }, + globals: { + globalThis: 'readonly' + } +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb26859 --- /dev/null +++ b/.gitignore @@ -0,0 +1,64 @@ +# Dependencies +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Production builds +dist/ +build/ + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ + +# nyc test coverage +.nyc_output + +# Dependency directories +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# Local cache +.cache/ + +# Temporary folders +tmp/ +temp/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..bc54775 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,70 @@ +# 更新日志 + +## [2.0.0] - 2024-01-20 + +### 🎉 重大更新 - Token管理系统重构 + +#### ✨ 新增功能 +- **Base64 Token导入**: 支持多种格式的Base64编码Token解析 +- **可视化Token管理**: 名称-Token列表形式管理多个游戏角色 +- **WebSocket连接管理**: 自动建立和监控WebSocket连接状态 +- **批量操作功能**: 导入/导出、清理过期Token等批量功能 +- **响应式Token界面**: 完美适配桌面和移动设备的Token管理界面 + +#### 🗑️ 移除功能 +- **登录注册系统**: 完全移除传统的用户认证流程 +- **用户管理**: 不再需要用户账户系统 +- **API依赖**: 移除所有后端接口依赖 + +#### 🔄 重大变更 +- **入口页面**: 从登录页面改为Token导入页面 (`/tokens`) +- **路由结构**: 重构路由,旧路由自动重定向到Token管理 +- **数据结构**: 全新的Token数据结构,支持自定义名称和完整信息 +- **访问控制**: 基于Token存在性而非用户认证状态 + +#### 🛠️ 技术改进 +- **本地存储**: 所有数据完全本地化存储 +- **智能解析**: 自动识别和解析各种Base64格式 +- **连接监控**: 实时WebSocket连接状态显示 +- **容错处理**: 完善的错误处理和用户提示 + +#### 📱 用户体验 +- **简化流程**: 无需注册登录,直接导入Token使用 +- **直观管理**: 卡片式Token列表,状态一目了然 +- **快速操作**: 一键选择、连接、管理Token +- **数据安全**: 本地存储,Token信息脱敏显示 + +--- + +## [1.x.x] - 历史版本 + +### 特性 +- 基于用户认证的传统系统 +- API接口依赖的数据管理 +- 游戏角色CRUD操作 +- 日常任务管理功能 + +--- + +## 升级指南 + +### 从1.x版本升级到2.0 +1. **数据迁移**: + - 导出现有游戏角色数据 + - 获取每个角色对应的Token + - 将Token转换为Base64格式后导入新系统 + +2. **使用变更**: + - 不再需要注册登录 + - 直接访问 `/tokens` 页面导入Token + - 通过Token名称管理多个游戏角色 + +3. **功能对照**: + - 游戏角色管理 → Token管理 + - 用户认证 → Token导入 + - 角色选择 → Token选择 + +### 兼容性说明 +- 旧版本路由会自动重定向到新系统 +- 本地存储数据需要手动迁移 +- WebSocket连接方式保持兼容 \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..3619628 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,218 @@ +# 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. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5fe8aaa --- /dev/null +++ b/LICENSE @@ -0,0 +1,42 @@ +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License + +Copyright (c) 2024 XYZW Team + +This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. + +You are free to: +- Share — copy and redistribute the material in any medium or format +- Adapt — remix, transform, and build upon the material + +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: +- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. +- NonCommercial — You may not use the material for commercial purposes. +- ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. +- No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + +Notices: +You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation. + +No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material. + +For the full legal text of this license, please visit: +https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode + +--- + +ADDITIONAL TERMS FOR THIS SOFTWARE: + +This software is specifically designed for educational and personal use only. +Commercial use, including but not limited to: +- Selling this software or derivative works +- Using this software in commercial gaming operations +- Integrating this software into commercial products or services +- Using this software to generate revenue in any form + +is strictly prohibited without explicit written permission from the copyright holders. + +The software is provided "AS IS", without warranty of any kind, express or implied, +including but not limited to the warranties of merchantability, fitness for a +particular purpose and noninfringement. \ No newline at end of file diff --git a/LOCAL_TOKEN_CHANGES.md b/LOCAL_TOKEN_CHANGES.md new file mode 100644 index 0000000..d3e9a9d --- /dev/null +++ b/LOCAL_TOKEN_CHANGES.md @@ -0,0 +1,143 @@ +# 本地Token存储重构说明 + +本次重构完全移除了所有API接口请求,改为使用本地存储管理用户认证和游戏角色token。 + +## 主要变更 + +### 1. 新增文件 + +#### `/src/stores/localTokenManager.js` +- 完整的本地token管理系统 +- 支持用户认证token和游戏角色token管理 +- 内置WebSocket连接管理 +- 支持token导入/导出、过期清理等功能 + +#### `/src/components/TokenManager.vue` +- Token管理界面组件 +- 可视化显示所有token状态 +- 支持WebSocket连接控制 +- 提供批量操作功能 + +### 2. 修改的文件 + +#### `/src/stores/auth.js` +- **移除**: 所有`api.auth.*`调用 +- **新增**: 本地认证逻辑,模拟用户登录 +- **集成**: localTokenStore进行token管理 + +#### `/src/stores/gameRoles.js` +- **移除**: 所有`api.gameRoles.*`调用 +- **新增**: 本地角色管理,自动生成游戏token +- **集成**: 角色选择时自动建立WebSocket连接 + +#### `/src/views/DailyTasks.vue` +- **移除**: `api.dailyTasks.*`调用 +- **新增**: 本地模拟任务数据生成 +- **集成**: 通过WebSocket执行任务(模拟) + +#### `/src/views/Profile.vue` +- **新增**: TokenManager组件,提供token管理界面 + +## 核心功能 + +### 用户认证 +```javascript +// 本地认证,无需API调用 +const result = await authStore.login({ username, password }) +``` + +### 游戏角色管理 +```javascript +// 添加角色时自动生成游戏token +const result = await gameRolesStore.addGameRole(roleData) +// 自动生成: roleId, gameToken, wsUrl +``` + +### WebSocket连接 +```javascript +// 选择角色时自动建立WebSocket连接 +gameRolesStore.selectRole(role) +// 使用本地存储的token建立连接 + +// 手动控制连接 +localTokenStore.createWebSocketConnection(roleId, token, wsUrl) +localTokenStore.closeWebSocketConnection(roleId) +``` + +### Token管理 +```javascript +// 添加游戏token +localTokenStore.addGameToken(roleId, tokenData) + +// 获取token +const tokenData = localTokenStore.getGameToken(roleId) + +// 导出所有token +const backup = localTokenStore.exportTokens() + +// 导入token +localTokenStore.importTokens(backupData) +``` + +## 数据结构 + +### 游戏Token数据结构 +```javascript +{ + token: "game_token_xxx", // 游戏token + roleId: "role_xxx", // 角色ID + roleName: "角色名称", // 角色名称 + server: "服务器名", // 服务器 + wsUrl: "wss://game.xxx/ws", // WebSocket URL + createdAt: "2024-01-01T00:00:00Z", + lastUsed: "2024-01-01T00:00:00Z", + isActive: true +} +``` + +### WebSocket连接状态 +```javascript +{ + connection: WebSocket, // WebSocket连接对象 + status: "connected", // 连接状态 + roleId: "role_xxx", // 关联角色ID + connectedAt: "2024-01-01T00:00:00Z" +} +``` + +## 使用说明 + +### 1. 登录 +- 用户名/密码任意输入即可本地认证 +- 自动生成用户token并保存 + +### 2. 添加游戏角色 +- 填写角色信息后自动生成: + - 角色ID + - 游戏token + - WebSocket连接URL + +### 3. 管理Token +- 访问"个人设置"页面查看Token管理器 +- 可以查看、编辑、删除、导出/导入token +- 可以手动控制WebSocket连接 + +### 4. 执行任务 +- 选择角色后自动建立WebSocket连接 +- 执行任务通过WebSocket发送指令(模拟) +- 所有操作记录保存在本地 + +## 优势 + +1. **完全离线**: 无需任何服务器接口 +2. **数据安全**: 所有数据存储在本地 +3. **功能完整**: 保留原有所有功能 +4. **易于扩展**: 模块化设计,便于添加新功能 +5. **WebSocket支持**: 内置完整的WebSocket连接管理 + +## 注意事项 + +1. 所有数据存储在浏览器localStorage中 +2. 清除浏览器数据会丢失所有token +3. 建议定期使用导出功能备份token数据 +4. WebSocket连接使用模拟URL,需要根据实际情况修改 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..458f6e2 --- /dev/null +++ b/README.md @@ -0,0 +1,477 @@ +# XYZW Web Helper + +