249 lines
7.0 KiB
Markdown
249 lines
7.0 KiB
Markdown
# 插件系统实现状态
|
||
|
||
## ✅ 已完成
|
||
|
||
### 1. 核心基础设施
|
||
|
||
#### ITool.ts - Tool基础接口和抽象类
|
||
```typescript
|
||
interface ITool<TConfig> {
|
||
readonly name: string;
|
||
initialize(config: TConfig): Promise<void>;
|
||
cleanup?(): Promise<void>;
|
||
healthCheck?(): Promise<boolean>;
|
||
}
|
||
|
||
abstract class BaseTool<TConfig> implements ITool<TConfig> {
|
||
// 强制子类实现配置验证
|
||
protected abstract validateConfig(config: TConfig): void;
|
||
// 强制子类实现初始化逻辑
|
||
protected abstract doInitialize(): Promise<void>;
|
||
// 提供状态检查
|
||
protected ensureInitialized(): void;
|
||
}
|
||
```
|
||
|
||
**作用:**
|
||
- ✅ 强制所有Tool实现统一接口
|
||
- ✅ 提供模板方法模式保证初始化流程
|
||
- ✅ 自动状态检查防止未初始化调用
|
||
|
||
#### BaseAdapter.ts - Adapter基础类
|
||
```typescript
|
||
abstract class BaseAdapter implements ISiteAdapter {
|
||
// 强制子类注册工具
|
||
protected abstract registerTools(): void;
|
||
// 强制子类声明依赖
|
||
protected abstract getRequiredTools(): string[];
|
||
// 提供工具管理
|
||
protected registerTool(tool: ITool): void;
|
||
protected getTool<T>(name: string): T;
|
||
}
|
||
```
|
||
|
||
**作用:**
|
||
- ✅ 强制Adapter注册工具
|
||
- ✅ 自动验证必需工具是否注册
|
||
- ✅ 类型安全的工具获取
|
||
- ✅ 统一的初始化流程
|
||
|
||
### 2. 第一个Tool实现
|
||
|
||
#### AccountGeneratorTool - 账号生成器
|
||
```typescript
|
||
class AccountGeneratorTool extends BaseTool<AccountGeneratorConfig> {
|
||
async generate(): Promise<AccountData>
|
||
}
|
||
```
|
||
|
||
**功能:**
|
||
- ✅ 生成随机邮箱
|
||
- ✅ 生成强密码
|
||
- ✅ 生成随机姓名
|
||
- ✅ 生成手机号
|
||
- ✅ 支持配置(域名、密码长度等)
|
||
|
||
### 3. 示例Adapter实现
|
||
|
||
#### WindsurfAdapter
|
||
```typescript
|
||
class WindsurfAdapter extends BaseAdapter {
|
||
protected registerTools() {
|
||
// 注册工具并配置
|
||
this.registerTool(new AccountGeneratorTool({
|
||
emailDomain: 'tempmail.com',
|
||
passwordLength: 12
|
||
}));
|
||
}
|
||
|
||
getHandlers() {
|
||
// 提供custom action处理
|
||
return { generateCard, handleEmailVerification, ... };
|
||
}
|
||
}
|
||
```
|
||
|
||
**演示了:**
|
||
- ✅ 如何注册工具
|
||
- ✅ 如何配置工具
|
||
- ✅ 如何使用工具
|
||
- ✅ 如何编排业务逻辑
|
||
|
||
---
|
||
|
||
## 📋 架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ ISiteAdapter (接口) │
|
||
└──────────────┬──────────────────────────┘
|
||
│
|
||
┌──────────────▼──────────────────────────┐
|
||
│ BaseAdapter (抽象基类) │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 工具管理 │ │
|
||
│ │ - registerTool() │ │
|
||
│ │ - getTool() │ │
|
||
│ │ - validateRequiredTools() │ │
|
||
│ └──────────────────────────────────┘ │
|
||
└──────────────┬──────────────────────────┘
|
||
│
|
||
┌──────────────▼──────────────────────────┐
|
||
│ WindsurfAdapter (具体实现) │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 注册工具 │ │
|
||
│ │ - AccountGeneratorTool │ │
|
||
│ │ - DatabaseTool (TODO) │ │
|
||
│ │ - EmailTool (TODO) │ │
|
||
│ └──────────────────────────────────┘ │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 业务逻辑 │ │
|
||
│ │ - generateCard() │ │
|
||
│ │ - handleEmailVerification() │ │
|
||
│ └──────────────────────────────────┘ │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 当前可运行
|
||
|
||
```bash
|
||
# 设置环境变量
|
||
export ADSPOWER_USER_ID="your-id"
|
||
|
||
# 运行Windsurf(会自动生成账号)
|
||
pnpm run run -- windsurf
|
||
```
|
||
|
||
**会发生什么:**
|
||
1. ✅ 加载 windsurf.yaml
|
||
2. ✅ 加载 windsurf-adapter.ts
|
||
3. ✅ 注册 AccountGeneratorTool
|
||
4. ✅ 验证必需工具
|
||
5. ✅ 初始化工具
|
||
6. ✅ 自动生成账号数据
|
||
7. ✅ 执行workflow
|
||
8. ✅ 调用custom handlers
|
||
|
||
---
|
||
|
||
## ⏳ 待实现的Tool
|
||
|
||
按优先级:
|
||
|
||
### 1. DatabaseTool (高优先级)
|
||
```typescript
|
||
class DatabaseTool extends BaseTool<DatabaseConfig> {
|
||
async connect(): Promise<void>
|
||
async query(sql: string, params?: any[]): Promise<any>
|
||
async save(table: string, data: any): Promise<void>
|
||
async close(): Promise<void>
|
||
}
|
||
```
|
||
|
||
**用途:**
|
||
- 保存账号数据
|
||
- 获取卡片数据
|
||
- 标记卡为已使用
|
||
|
||
### 2. CardGeneratorTool (高优先级)
|
||
```typescript
|
||
class CardGeneratorTool extends BaseTool<CardGeneratorConfig> {
|
||
async generate(): Promise<CardData>
|
||
async markAsUsed(cardNumber: string): Promise<void>
|
||
}
|
||
```
|
||
|
||
**配置:**
|
||
- source: 'database' | 'api' | 'mock'
|
||
- binFilter: string[]
|
||
- reuseDelay: number
|
||
|
||
### 3. EmailTool (中优先级)
|
||
```typescript
|
||
class EmailTool extends BaseTool<EmailConfig> {
|
||
async connect(): Promise<void>
|
||
async getVerificationCode(options: any): Promise<string>
|
||
async close(): Promise<void>
|
||
}
|
||
```
|
||
|
||
**配置:**
|
||
- protocol: 'imap' | 'pop3' | 'api'
|
||
- server: string
|
||
- codePattern: RegExp
|
||
|
||
### 4. CaptchaTool (低优先级)
|
||
```typescript
|
||
class CaptchaTool extends BaseTool<CaptchaConfig> {
|
||
async solve(type: string, params: any): Promise<any>
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 设计优势总结
|
||
|
||
### 1. 强制规范
|
||
- ❌ 不能忘记实现 `validateConfig()`
|
||
- ❌ 不能忘记注册必需的Tool
|
||
- ❌ 不能在未初始化时调用Tool
|
||
- ✅ 编译时+运行时双重检查
|
||
|
||
### 2. 类型安全
|
||
```typescript
|
||
// ✅ TypeScript知道返回类型
|
||
const accountGen = this.getTool<AccountGeneratorTool>('account-generator');
|
||
const account = await accountGen.generate(); // 有代码提示
|
||
```
|
||
|
||
### 3. 配置驱动
|
||
```typescript
|
||
// 同一个Tool,不同配置 = 不同实例
|
||
// A网站
|
||
new AccountGeneratorTool({ emailDomain: 'mail.com' })
|
||
// B网站
|
||
new AccountGeneratorTool({ emailDomain: 'qq.com' })
|
||
```
|
||
|
||
### 4. 易扩展
|
||
```typescript
|
||
// 添加新Tool:
|
||
// 1. 继承BaseTool
|
||
// 2. 实现3个方法
|
||
// 3. 在Adapter中注册
|
||
// 完成!
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 下一步
|
||
|
||
1. 实现 `DatabaseTool`
|
||
2. 实现 `CardGeneratorTool`
|
||
3. 更新 `WindsurfAdapter` 使用所有Tool
|
||
4. 测试完整流程
|
||
|
||
**现在的架构:规范即代码,无法违反!** 🎉
|