/** * ErrorHandler - SMH JS SDK 统一错误处理 * 浏览器环境适配版本 */ export interface ErrorAnalysis { statusCode?: number; isExpired: boolean; } /** * 分析错误,判断是否为过期错误 */ export declare function analyzeError(error: any): ErrorAnalysis; /** * SMH SDK 错误代码 */ export declare enum ErrorCode { FILE_NOT_FOUND = "FileNotFound", FILE_MODIFIED = "FileModified", FILE_SIZE_MISMATCH = "FileSizeMismatch", FILE_CRC64_MISMATCH = "FileCrc64Mismatch", FILE_TOO_LARGE = "FileTooLarge", INVALID_FILE = "InvalidFile", UPLOAD_FAILED = "UploadFailed", UPLOAD_CANCELED = "UploadCanceled", UPLOAD_PAUSED = "UploadPaused", PART_UPLOAD_FAILED = "PartUploadFailed", RENEW_UPLOAD_FAILED = "RenewUploadFailed", DOWNLOAD_FAILED = "DownloadFailed", DOWNLOAD_CANCELED = "DownloadCanceled", DOWNLOAD_PAUSED = "DownloadPaused", INVALID_PARAMETER = "InvalidParameter", NETWORK_ERROR = "NetworkError", REQUEST_TIMEOUT = "RequestTimeout", SERVER_ERROR = "ServerError", OPERATION_FAILED = "OperationFailed" } /** * SMH SDK 错误接口定义 */ export interface ISMHError { message: string; code: ErrorCode; status?: number; reqId?: string; response?: Record; cause?: Error; timestamp: number; } /** * SMH SDK 统一错误类 */ export declare class SMHError extends Error implements ISMHError { name: string; readonly code: ErrorCode; readonly status?: number; readonly reqId?: string; readonly response: Record; readonly cause?: Error; readonly timestamp: number; constructor(err: ErrorCode | ISMHError | SMHError | Error | string, message?: string, cause?: Error, response?: Record); /** * 转换为日志字符串 */ toLogString(): string; /** * 转换为 JSON 格式 */ toJSON(): Record; } /** * AxiosError 中提取的后端错误详情 */ export interface AxiosErrorInfo { status?: number; serverCode?: string; serverMessage?: string; responseData?: Record; reqId?: string; isNetworkError: boolean; } /** * 从 AxiosError 中提取后端返回的错误详情 */ export declare function extractAxiosErrorInfo(error: any): AxiosErrorInfo; /** * 创建 SMH SDK 错误的便捷函数 */ export declare function newError(code: ErrorCode, message: string, cause?: Error, response?: Record, options?: { status?: number; reqId?: string; }): SMHError; /** * SMH 后端服务错误码(serverCode) * 对应后端 API 返回的 code 字段 */ export declare enum ServerErrorCode { BadRequest = "BadRequest", EmptyLibraryIdOrSecret = "EmptyLibraryIdOrSecret", EmptyLibrarySecret = "EmptyLibrarySecret", EmptyLibraryId = "EmptyLibraryId", EmptySpaceId = "EmptySpaceId", EmptyFileName = "EmptyFileName", EmptyCosUploadId = "EmptyCosUploadId", EmptyAccessToken = "EmptyAccessToken", NotMultiSpaceLibrary = "NotMultiSpaceLibrary", MultipartUploadIncomplete = "MultipartUploadIncomplete", UploadIncomplete = "UploadIncomplete", DirectoryNameLengthExceed = "DirectoryNameLengthExceed", DirectoryNotAllowed = "DirectoryNotAllowed", RootDirectoryNotAllowed = "RootDirectoryNotAllowed", DirectoryLevelExceed = "DirectoryLevelExceed", FileNameLengthExceed = "FileNameLengthExceed", ExtnameNotAllowed = "ExtnameNotAllowed", UploadToRootDirectoryNotAllowed = "UploadToRootDirectoryNotAllowed", SourceDirectoryIsParentOfDestination = "SourceDirectoryIsParentOfDestination", InvalidSourceDirectory = "InvalidSourceDirectory", InvalidSourceFile = "InvalidSourceFile", InvalidSpaceOrDirectoryPath = "InvalidSpaceOrDirectoryPath", InvalidConflictResolutionStrategy = "InvalidConflictResolutionStrategy", ParamInvalid = "ParamInvalid", SpaceIdInvalid = "SpaceIdInvalid", IllegalFileName = "IllegalFileName", FileTypeNotMatched = "FileTypeNotMatched", BadCrc64 = "BadCrc64", QuotaLimitReached = "QuotaLimitReached", FileUncompressNotAllowed = "FileUncompressNotAllowed", SearchTooComplex = "SearchTooComplex", SearchNotEnabled = "SearchNotEnabled", RecycleBinNotEnabled = "RecycleBinNotEnabled", QuotaSpacesInvalid = "QuotaSpacesInvalid", SearchIdInvalid = "SearchIdInvalid", InvalidDestinationPath = "InvalidDestinationPath", MultipartUploadPartTooSmall = "MultipartUploadPartTooSmall", IncompleteBody = "IncompleteBody", TooManyItems = "TooManyItems", NoItemsProvided = "NoItemsProvided", InvalidTimeFormat = "InvalidTimeFormat", OverwriteFileNotAllowed = "OverwriteFileNotAllowed", InvalidFileHistoryCount = "InvalidFileHistoryCount", InvalidFileHistoryExpireDay = "InvalidFileHistoryExpireDay", InvalidFileHistoryMergeInterval = "InvalidFileHistoryMergeInterval", SymlinkDepthLimitExceeded = "SymlinkDepthLimitExceeded", SymlinkToDirectoryNotAllowed = "SymlinkToDirectoryNotAllowed", SymlinkOverwriteConflict = "SymlinkOverwriteConflict", UnsupportedSourceFormat = "UnsupportedSourceFormat", UnsupportedTargetFormat = "UnsupportedTargetFormat", FunctionNotEnabled = "FunctionNotEnabled", UnsupportedFileType = "UnsupportedFileType", QuotaCapacityLessThanSize = "QuotaCapacityLessThanSize", QuotaCapacityRequired = "QuotaCapacityRequired", InvalidDirectoryStatsType = "InvalidDirectoryStatsType", ResourceMigrationNotEnabled = "ResourceMigrationNotEnabled", ResourceNotSupported = "ResourceNotSupported", ResolutionUpScalingNotAllowed = "ResolutionUpScalingNotAllowed", M3u8OnlyMediaPlaylistAllowed = "M3u8OnlyMediaPlaylistAllowed", M3u8HttpKeyNotAllowed = "M3u8HttpKeyNotAllowed", M3u8HttpSegmentNotAllowed = "M3u8HttpSegmentNotAllowed", M3u8PlaylistInvalid = "M3u8PlaylistInvalid", M3u8SegmentsInvalid = "M3u8SegmentsInvalid", M3u8InfoMapUnknown = "M3u8InfoMapUnknown", M3u8InfoMapFieldUnknown = "M3u8InfoMapFieldUnknown", OnlyVideoCanBeTranscoded = "OnlyVideoCanBeTranscoded", CaptchaInvalid = "CaptchaInvalid", WatermarkNotEnabled = "WatermarkNotEnabled", GraphicCaptchaFailed = "GraphicCaptchaFailed", CloseOldList = "CloseOldList", NoPermission = "NoPermission", AccessTokenNotMatchLibrary = "AccessTokenNotMatchLibrary", AccessTokenNotMatchSpace = "AccessTokenNotMatchSpace", AccessTokenVersionNotMatch = "AccessTokenVersionNotMatch", InvalidAccessToken = "InvalidAccessToken", ReadForbidden = "ReadForbidden", WriteForbidden = "WriteForbidden", LibraryServiceExpired = "LibraryServiceExpired", LibraryInitializing = "LibraryInitializing", OperationOnRawM3u8IsForbidden = "OperationOnRawM3u8IsForbidden", SpaceBanned = "SpaceBanned", ShareDisabled = "ShareDisabled", ShareExpired = "ShareExpired", ShareAuditing = "ShareAuditing", ShareTokenInvalid = "ShareTokenInvalid", ExtractionCodeInvalid = "ExtractionCodeInvalid", LoginRequired = "LoginRequired", ShareAccessDenied = "ShareAccessDenied", AnonymousNotAllowed = "AnonymousNotAllowed", CannotPreview = "CannotPreview", CannotDownload = "CannotDownload", CannotSaveToNetDisk = "CannotSaveToNetDisk", CannotModify = "CannotModify", ShareServiceDisabled = "ShareServiceDisabled", ConfirmKeyNotFound = "ConfirmKeyNotFound", RouteNotFound = "RouteNotFound", LibraryNotFound = "LibraryNotFound", SpaceNotFound = "SpaceNotFound", DirectoryNotFound = "DirectoryNotFound", SourceDirectoryNotFound = "SourceDirectoryNotFound", SourceFileNotFound = "SourceFileNotFound", UploadNotFound = "UploadNotFound", FileNotFound = "FileNotFound", PathNotFound = "PathNotFound", MarkerNotFound = "MarkerNotFound", NoQuota = "NoQuota", QuotaNotFound = "QuotaNotFound", WrongLibraryIdOrSecret = "WrongLibraryIdOrSecret", FavoriteIdNotFound = "FavoriteIdNotFound", FileRemovedByQuota = "FileRemovedByQuota", CosObjectNonexistent = "CosObjectNonexistent", RootLinkFileNotFound = "RootLinkFileNotFound", TrafficStatsNotFound = "TrafficStatsNotFound", M3u8Converting = "M3u8Converting", ShareNotFound = "ShareNotFound", FileNotInShare = "FileNotInShare", ShareFileEmpty = "ShareFileEmpty", ReadRequestTimeout = "ReadRequestTimeout", DuplicateQuota = "DuplicateQuota", UploadComplete = "UploadComplete", SameNameDirectoryOrFileExists = "SameNameDirectoryOrFileExists", DuplicateFavoriteRecord = "DuplicateFavoriteRecord", SpaceNotEmpty = "SpaceNotEmpty", PathConflict = "PathConflict", RenameTooManyTimes = "RenameTooManyTimes", CircleSymlink = "CircleSymlink", ShareHasBeenUpdated = "ShareHasBeenUpdated", RequestEntityTooLarge = "RequestEntityTooLarge", URITooLong = "URITooLong", RateLimitExceeded = "RateLimitExceeded", HeaderFieldsTooLarge = "HeaderFieldsTooLarge", SensitiveContentRecognized = "SensitiveContentRecognized", ClientDisconnected = "ClientDisconnected", ServerOverloaded = "ServerOverloaded", InternalServerError = "InternalServerError", RequestTimeout = "RequestTimeout" } /** * 根据后端 serverCode 获取用户友好消息 * * @param serverCode - 后端返回的错误码,如 'QuotaLimitReached' * @param fallback - 未匹配时的回退消息,默认为 undefined(返回 undefined 时由调用方决定展示什么) * @returns 用户友好消息,如果 serverCode 无法匹配且未提供 fallback 则返回 undefined * * @example * ```ts * getServerErrorMessage('QuotaLimitReached'); * // => '存储空间不足,请清理文件或扩容' * * getServerErrorMessage('UnknownCode', '操作失败'); * // => '操作失败' * ``` */ export declare function getServerErrorMessage(serverCode: string | undefined, fallback?: string): string | undefined; /** * 批量自定义或覆盖后端 serverCode 的中文映射 * * 调用方可根据产品需要自定义错误提示文案: * @example * ```ts * setServerErrorMessages({ * 'QuotaLimitReached': '您的网盘空间已满,请升级套餐', * 'NoPermission': '您没有权限执行此操作,请联系管理员', * }); * ``` */ export declare function setServerErrorMessages(customMessages: Record): void; /** * 恢复后端 serverCode 中文映射为默认值 * * 用于撤销 setServerErrorMessages() 的自定义覆盖: * @example * ```ts * resetServerErrorMessages(); * ``` */ export declare function resetServerErrorMessages(): void; /** * 将任意错误包装为 SMHError(公共方法) * * 供 Uploader、Downloader、SmhClient 等模块统一使用, * 避免各处重复编写 extractAxiosErrorInfo + getServerErrorMessage + newError 逻辑。 * * @param e - 原始错误 * @param defaultCode - 当无法判断为网络/服务端错误时使用的默认 ErrorCode * @param fallbackMessage - 无法从后端提取消息时使用的回退消息 * @param extraResponse - 附加到 SMHError.response 中的额外信息 */ export declare function wrapErrorToSMHError(e: any, defaultCode: ErrorCode, fallbackMessage: string, extraResponse?: Record): SMHError;