Files
vue-desktop/src/sdk/types.ts

638 lines
13 KiB
TypeScript
Raw Normal View History

2025-09-24 16:43:10 +08:00
/**
* SDK主接口
* 访
*/
// =============================================================================
// 核心类型定义
// =============================================================================
/**
* SDK初始化配置
*/
export interface SDKConfig {
appId: string
appName: string
version: string
permissions: string[]
debug?: boolean
}
/**
* API响应结果包装器
*/
export interface APIResponse<T = any> {
success: boolean
data?: T
error?: string
code?: number
}
/**
*
*/
export type EventCallback<T = any> = (data: T) => void | Promise<void>
/**
*
*/
export enum PermissionStatus {
GRANTED = 'granted',
DENIED = 'denied',
PROMPT = 'prompt'
}
// =============================================================================
// 窗体SDK接口
// =============================================================================
/**
*
*/
export enum WindowState {
NORMAL = 'normal',
MINIMIZED = 'minimized',
MAXIMIZED = 'maximized',
FULLSCREEN = 'fullscreen'
}
/**
*
*/
export interface WindowEvents {
onResize: (width: number, height: number) => void
onMove: (x: number, y: number) => void
onStateChange: (state: WindowState) => void
onFocus: () => void
onBlur: () => void
onClose: () => void
}
/**
* SDK接口
*/
export interface WindowSDK {
/**
*
*/
setTitle(title: string): Promise<APIResponse<boolean>>
/**
*
*/
resize(width: number, height: number): Promise<APIResponse<boolean>>
/**
*
*/
move(x: number, y: number): Promise<APIResponse<boolean>>
/**
*
*/
minimize(): Promise<APIResponse<boolean>>
/**
*
*/
maximize(): Promise<APIResponse<boolean>>
/**
*
*/
restore(): Promise<APIResponse<boolean>>
/**
*
*/
fullscreen(): Promise<APIResponse<boolean>>
/**
*
*/
close(): Promise<APIResponse<boolean>>
/**
*
*/
getState(): Promise<APIResponse<WindowState>>
/**
*
*/
getSize(): Promise<APIResponse<{ width: number; height: number }>>
/**
*
*/
getPosition(): Promise<APIResponse<{ x: number; y: number }>>
/**
*
*/
on<K extends keyof WindowEvents>(event: K, callback: WindowEvents[K]): void
/**
*
*/
off<K extends keyof WindowEvents>(event: K, callback?: WindowEvents[K]): void
}
// =============================================================================
// 存储SDK接口
// =============================================================================
/**
*
*/
export interface StorageEvents {
onChange: (key: string, newValue: any, oldValue: any) => void
onQuotaExceeded: (usedSpace: number, maxSpace: number) => void
}
/**
* 使
*/
export interface StorageStats {
usedSpace: number // 已使用空间(MB)
maxSpace: number // 最大空间(MB)
keysCount: number // 键数量
lastAccessed: Date
}
/**
* SDK接口
*/
export interface StorageSDK {
/**
*
*/
set(key: string, value: any): Promise<APIResponse<boolean>>
/**
*
*/
get<T = any>(key: string): Promise<APIResponse<T | null>>
/**
*
*/
remove(key: string): Promise<APIResponse<boolean>>
/**
*
*/
clear(): Promise<APIResponse<boolean>>
/**
*
*/
keys(): Promise<APIResponse<string[]>>
/**
*
*/
has(key: string): Promise<APIResponse<boolean>>
/**
* 使
*/
getStats(): Promise<APIResponse<StorageStats>>
/**
*
*/
on<K extends keyof StorageEvents>(event: K, callback: StorageEvents[K]): void
/**
*
*/
off<K extends keyof StorageEvents>(event: K, callback?: StorageEvents[K]): void
}
// =============================================================================
// 网络SDK接口
// =============================================================================
/**
* HTTP方法
*/
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'
/**
*
*/
export interface NetworkRequestConfig {
method?: HTTPMethod
headers?: Record<string, string>
body?: any
timeout?: number
responseType?: 'json' | 'text' | 'blob' | 'arrayBuffer'
}
/**
*
*/
export interface NetworkResponse<T = any> {
data: T
status: number
statusText: string
headers: Record<string, string>
url: string
}
/**
*
*/
export type UploadProgressCallback = (loaded: number, total: number) => void
/**
*
*/
export type DownloadProgressCallback = (loaded: number, total: number) => void
/**
* SDK接口
*/
export interface NetworkSDK {
/**
* HTTP请求
*/
request<T = any>(url: string, config?: NetworkRequestConfig): Promise<APIResponse<NetworkResponse<T>>>
/**
* GET请求
*/
get<T = any>(url: string, config?: Omit<NetworkRequestConfig, 'method'>): Promise<APIResponse<NetworkResponse<T>>>
/**
* POST请求
*/
post<T = any>(url: string, data?: any, config?: Omit<NetworkRequestConfig, 'method' | 'body'>): Promise<APIResponse<NetworkResponse<T>>>
/**
* PUT请求
*/
put<T = any>(url: string, data?: any, config?: Omit<NetworkRequestConfig, 'method' | 'body'>): Promise<APIResponse<NetworkResponse<T>>>
/**
* DELETE请求
*/
delete<T = any>(url: string, config?: Omit<NetworkRequestConfig, 'method'>): Promise<APIResponse<NetworkResponse<T>>>
/**
*
*/
upload(url: string, file: File | Blob, onProgress?: UploadProgressCallback): Promise<APIResponse<NetworkResponse>>
/**
*
*/
download(url: string, filename?: string, onProgress?: DownloadProgressCallback): Promise<APIResponse<Blob>>
/**
*
*/
isOnline(): Promise<APIResponse<boolean>>
/**
*
*/
getStats(): Promise<APIResponse<{ requestCount: number; failureCount: number; averageTime: number }>>
}
// =============================================================================
// 事件SDK接口
// =============================================================================
/**
*
*/
export interface EventMessage<T = any> {
id: string
channel: string
data: T
senderId: string
timestamp: Date
}
/**
*
*/
export interface EventSubscriptionConfig {
filter?: (message: EventMessage) => boolean
once?: boolean // 只监听一次
}
/**
* SDK接口
*/
export interface EventSDK {
/**
*
*/
emit<T = any>(channel: string, data: T): Promise<APIResponse<string>>
/**
*
*/
on<T = any>(
channel: string,
callback: (message: EventMessage<T>) => void,
config?: EventSubscriptionConfig
): Promise<APIResponse<string>>
/**
*
*/
off(subscriptionId: string): Promise<APIResponse<boolean>>
/**
* 广
*/
broadcast<T = any>(channel: string, data: T): Promise<APIResponse<string>>
/**
*
*/
sendTo<T = any>(targetAppId: string, data: T): Promise<APIResponse<string>>
/**
*
*/
getSubscriberCount(channel: string): Promise<APIResponse<number>>
/**
*
*/
getChannels(): Promise<APIResponse<string[]>>
}
// =============================================================================
// UI SDK接口
// =============================================================================
/**
*
*/
export enum DialogType {
INFO = 'info',
SUCCESS = 'success',
WARNING = 'warning',
ERROR = 'error',
CONFIRM = 'confirm'
}
/**
*
*/
export interface DialogOptions {
title?: string
message: string
type?: DialogType
buttons?: string[]
defaultButton?: number
cancelButton?: number
}
/**
*
*/
export interface NotificationOptions {
title: string
body: string
icon?: string
duration?: number // 显示时长(毫秒)
actions?: Array<{ title: string; action: string }>
}
/**
*
*/
export interface FilePickerOptions {
accept?: string // 文件类型过滤
multiple?: boolean // 是否多选
directory?: boolean // 是否选择目录
}
/**
* UI SDK接口
*/
export interface UISDK {
/**
*
*/
showDialog(options: DialogOptions): Promise<APIResponse<{ buttonIndex: number; inputValue?: string }>>
/**
*
*/
showNotification(options: NotificationOptions): Promise<APIResponse<string>>
/**
*
*/
showFilePicker(options?: FilePickerOptions): Promise<APIResponse<FileList | null>>
/**
*
*/
showSaveDialog(defaultName?: string, accept?: string): Promise<APIResponse<string | null>>
/**
* Toast消息
*/
showToast(message: string, type?: 'info' | 'success' | 'warning' | 'error', duration?: number): Promise<APIResponse<string>>
/**
*
*/
showLoading(message?: string): Promise<APIResponse<string>>
/**
*
*/
hideLoading(id: string): Promise<APIResponse<boolean>>
/**
*
*/
showProgress(options: { title?: string; message?: string; progress: number }): Promise<APIResponse<string>>
/**
*
*/
updateProgress(id: string, progress: number, message?: string): Promise<APIResponse<boolean>>
/**
*
*/
hideProgress(id: string): Promise<APIResponse<boolean>>
}
// =============================================================================
// 系统SDK接口
// =============================================================================
/**
*
*/
export interface SystemInfo {
platform: string
userAgent: string
language: string
timezone: string
screenResolution: { width: number; height: number }
colorDepth: number
pixelRatio: number
}
/**
*
*/
export interface AppInfo {
id: string
name: string
version: string
permissions: string[]
createdAt: Date
lastActiveAt: Date
}
/**
* SDK接口
*/
export interface SystemSDK {
/**
*
*/
getSystemInfo(): Promise<APIResponse<SystemInfo>>
/**
*
*/
getAppInfo(): Promise<APIResponse<AppInfo>>
/**
*
*/
requestPermission(permission: string, reason?: string): Promise<APIResponse<PermissionStatus>>
/**
*
*/
checkPermission(permission: string): Promise<APIResponse<PermissionStatus>>
/**
*
*/
getClipboard(): Promise<APIResponse<string>>
/**
*
*/
setClipboard(text: string): Promise<APIResponse<boolean>>
/**
*
*/
openExternal(url: string): Promise<APIResponse<boolean>>
/**
*
*/
getCurrentTime(): Promise<APIResponse<Date>>
/**
* UUID
*/
generateUUID(): Promise<APIResponse<string>>
/**
* 退
*/
exit(): Promise<APIResponse<boolean>>
}
// =============================================================================
// 主SDK接口
// =============================================================================
/**
* SDK主接口
* SDK
*/
export interface SystemDesktopSDK {
/**
* SDK版本
*/
readonly version: string
/**
* ID
*/
readonly appId: string
/**
*
*/
readonly initialized: boolean
/**
* SDK
*/
readonly window: WindowSDK
/**
* SDK
*/
readonly storage: StorageSDK
/**
* SDK
*/
readonly network: NetworkSDK
/**
* SDK
*/
readonly events: EventSDK
/**
* UI操作SDK
*/
readonly ui: UISDK
/**
* SDK
*/
readonly system: SystemSDK
/**
* SDK
*/
init(config: SDKConfig): Promise<APIResponse<boolean>>
/**
* SDK
*/
destroy(): Promise<APIResponse<boolean>>
/**
* SDK状态
*/
getStatus(): Promise<APIResponse<{ initialized: boolean; connected: boolean; permissions: string[] }>>
}
// =============================================================================
// 全局类型声明
// =============================================================================
declare global {
interface Window {
/**
* SDK全局实例
*/
SystemSDK: SystemDesktopSDK
}
}