Files
MusicServer/sdk/types.ts
T
snowy-yang 66d06ef48a refactor(sdk): tipSearch 全删、歌词解码器归位、IPC 桥移除、api-source 层拆除
- 四平台 tipSearch 全部删除(永不做搜索联想),types 同步去掉 tipSearch 字段
- 歌词解码器归位:kg/krcDecode、tx/qrcDecode、kw/lyricDecode(原 common/ 下三处)
- rendererIpc/ipcNames IPC 桥删除,SDK 纯服务端化
- supportQuality 由各平台 apis 内联导出(sdk/index 汇总),kg/kw/tx/wy 改直连 apis/*,api-source 旧层移除
2026-10-01 16:33:53 +08:00

146 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// SDK 共享类型定义
// 所有平台模块与根模块的类型锚点。类型只描述实际返回的数据形状,不改变运行时行为。
/** 音乐平台标识 */
export type Source = 'kw' | 'kg' | 'tx' | 'wy'
/** 音质标识(wav 仅部分接口声明使用) */
export type Quality = '128k' | '320k' | 'flac' | 'flac24bit' | 'wav'
/** 单音质资源描述(搜索结果 types 数组项) */
export interface SongType {
type: Quality
size: string
}
/** 单音质详情(搜索结果 _types 映射项) */
export interface QualityInfo {
size: string
}
/** 歌曲信息(搜索结果项 / 取流入参) */
export interface SongInfo {
songmid?: string
hash?: string
copyrightId?: string
songStringId?: string
albumId?: string
name?: string | null
singer?: string
source?: Source
interval?: string | number
albumName?: string
img?: string | null
lrc?: string | null
otherSource?: string | null
types?: SongType[]
_types?: Partial<Record<Quality, QualityInfo>>
typeUrl?: Partial<Record<Quality, string>>
[key: string]: unknown
}
/** httpFetch 响应(与 common/request.ts 契约一致) */
export interface HttpResponse {
statusCode: number
statusMessage?: string
headers: Record<string, string | string[]>
body: any
raw?: Buffer
}
/** httpFetch 返回的可取消请求对象 */
export interface HttpRequestObject {
promise: Promise<HttpResponse>
cancelHttp(): void
}
/** httpFetch 选项(common/request.ts 子集) */
export interface HttpOptions {
method?: string
headers?: Record<string, string>
body?: string | object
form?: Record<string, unknown>
timeout?: number
lookup?: unknown
family?: number
}
/** 带取消句柄的异步结果(getMusicUrl/getLyric 等的统一返回形态) */
export interface RequestObj<T> {
promise: Promise<T>
cancelHttp(): void
}
/** 取流结果 */
export interface MusicUrlResult {
type: string
url: string
}
/** 歌词结果 */
export interface LyricInfo {
lyric: string
tlyric: string
rlyric?: string
yrc?: string
}
/** 搜索结果 */
export interface SearchResult {
list: SongInfo[]
allPage: number
total: number
limit: number
source: Source
}
/** 搜索模块(平台 musicSearch 子模块) */
export interface MusicSearchModule {
search(str: string, page?: number, limit?: number, retryNum?: number): Promise<SearchResult>
[key: string]: unknown
}
/** 歌词模块 */
export interface LyricModule {
getLyric(songInfo: SongInfo, ...rest: unknown[]): Promise<LyricInfo> | RequestObj<LyricInfo>
[key: string]: unknown
}
/** 封面模块 */
export interface PicModule {
getPic(songInfo: SongInfo, ...rest: unknown[]): Promise<string> | RequestObj<string>
[key: string]: unknown
}
/** 热搜模块 */
export interface HotSearchModule {
getList(): Promise<any>
[key: string]: unknown
}
/** 评论模块 */
export interface CommentModule {
getComment(songInfo: any, page?: number, limit?: number): Promise<any>
getHotComment(songInfo: any, page?: number, limit?: number): Promise<any>
[key: string]: unknown
}
/** 平台模块(各平台默认导出需满足的最小形状)
* 注:SDK 内部实现大量返回 httpFetch 原生的 HttpRequestObject,
* 实际 promise 会在 .then() 中被改写为对应结果类型;此处只约束调用侧可见形态。
*/
export interface PlatformModule {
init?(): Promise<unknown> | void
musicSearch?: MusicSearchModule
leaderboard?: any
songList?: any
hotSearch?: HotSearchModule
comment?: CommentModule
getMusicUrl?(songInfo: SongInfo, type: Quality): HttpRequestObject
getLyric?(songInfo: SongInfo, ...rest: unknown[]): HttpRequestObject
getPic?(songInfo: SongInfo, ...rest: unknown[]): HttpRequestObject | Promise<any>
getMusicInfo?(songInfo: SongInfo): HttpRequestObject | Promise<any>
getMusicDetailPageUrl?(songInfo: SongInfo): string
[key: string]: any
}