Files
xingrin/frontend/types/tool.types.ts

90 lines
3.1 KiB
TypeScript
Raw Normal View History

2025-12-12 18:04:57 +08:00
// 工具类型枚举
export type ToolType = 'opensource' | 'custom'
// 工具类型定义(匹配前端 camelCase 转换后的格式)
// 注意:后端返回 snake_caseapi-client.ts 自动转换为 camelCase
export interface Tool {
id: number
name: string // 工具名称
type: ToolType // 工具类型opensource/custom后端: type
repoUrl: string // 仓库地址(后端: repo_url
version: string // 版本号
description: string // 工具描述
categoryNames: string[] // 分类标签数组(后端: category_names
directory: string // 工具路径(后端: directory
installCommand: string // 安装命令(后端: install_command
updateCommand: string // 更新命令(后端: update_command
versionCommand: string // 版本查询命令(后端: version_command
createdAt: string // 后端: created_at
updatedAt: string // 后端: updated_at
}
// 工具分类名称到中文的映射
// 所有分类参考后端模型设计文档
export const CategoryNameMap: Record<string, string> = {
subdomain: '子域名扫描',
vulnerability: '漏洞扫描',
port: '端口扫描',
directory: '目录扫描',
dns: 'DNS解析',
http: 'HTTP探测',
crawler: '网页爬虫',
recon: '信息收集',
fuzzer: '模糊测试',
wordlist: '字典生成',
screenshot: '截图工具',
exploit: '漏洞利用',
network: '网络扫描',
other: '其他',
}
// 工具列表响应类型api-client.ts 会自动转换为 camelCase
export interface GetToolsResponse {
tools: Tool[]
total: number
page: number
pageSize: number // 后端返回 camelCase 格式
totalPages: number // 后端返回 camelCase 格式
// 兼容字段(向后兼容)
page_size?: number
total_pages?: number
}
// 创建工具请求类型
export interface CreateToolRequest {
name: string
type: ToolType // 工具类型(必填)
repoUrl?: string
version?: string
description?: string
categoryNames?: string[] // 分类标签数组
directory?: string // 工具路径(自定义工具必填)
installCommand?: string // 安装命令(开源工具必填)
updateCommand?: string // 更新命令(开源工具必填)
versionCommand?: string // 版本查询命令(开源工具必填)
}
// 更新工具请求类型
export interface UpdateToolRequest {
name?: string
type?: ToolType // 工具类型(用于验证命令字段)
repoUrl?: string
version?: string
description?: string
categoryNames?: string[] // 分类标签数组
directory?: string // 工具路径
installCommand?: string // 安装命令
updateCommand?: string // 更新命令
versionCommand?: string // 版本查询命令
}
// 工具查询参数
// 后端固定按更新时间降序排列,不支持自定义排序
export interface GetToolsParams {
page?: number
pageSize?: number
}
// 工具过滤类型
export type ToolFilter = 'all' | 'default' | 'custom'