UNPKG

nim-web-sdk-ng

Version:

Yunxin IM SDK next generation

298 lines (297 loc) 8.58 kB
import { UploadFileOptions } from './qchat/src/CloudStorageServiceInterface'; import { NIMEStrAnyObj } from './types'; /** * 嵌套版本的 Partial。支持嵌套类行为父类型嵌套类型的一部分。比如 RecursivePartial<AdaptersInterface>,允许 net 为 Partial */ export declare type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]>; }; /** * SDKType(HostEnv): https://docs.popo.netease.com/team/pc/MMC/pageDetail/4e0ea6fc8d37470eb5dc857c5c55d1c7 */ export declare const enum HostEnvTypes { Unset = 0, RN = 2, UNIAPP = 3, FLUTTER = 4, Electron = 5, WeiXin = 6, BROWSER = 100, H5 = 101, Ali = 102, Baidu = 103, Tiktok = 104 } export declare type GetAdapterType = () => RecursivePartial<AdaptersInterface>; export interface AdaptersInterface { getFileUploadInformation(options: UploadFileOptions): null | { uploadInfo: AdapterUploadFileResult; complete: boolean; }; setLogger(logger: any): void; platform: string; WebSocket: typeof AdapterWebSocketWrapper; localStorage: AdapterStorage; request(url: string, params?: AdapterRequestParams, otherOptions?: { exception_service?: number; }): Promise<AdapterRequestResult>; uploadFile(options: AdapterUploadFileOptions): Promise<AdapterUploadFileResult>; getSystemInfo(): AdapterSystemInfo; /** * 环境相关的任意数据。 * 第一次引入是为了在 RN 的 Adapters 中引入 AppState。 * * AppState 从 'react-native' 中引入。它不能来自于 src 文件夹,否则会被其它环境的产物中按照 externals 的方式引入。 * 其它环境在客户环境中最终打包时,因为缺少 'react-native' 会报错。 * * 因此,这里在 Adaters 中添加一些环境相关的特殊数据 */ envPayload: NIMEStrAnyObj; net: AdapterNet; logStorage: typeof AdapterLogStorageWrapper; } declare let AdapterLogStorageWrapper: { prototype: AdapterLogStorage; new (name?: string): AdapterLogStorage; }; /** * 日志存储能力 */ export interface AdapterLogStorage { /** * 打开: 打开文件 or 打开数据库 * @param name 文件 or 数据库名 */ open(): Promise<void>; /** * 销毁: 关闭文件 or 关闭数据库 */ close(): void; /** * 存储日志 * @param log 日志内容 */ addLogs(logs: AdapterLogStorageData[]): Promise<void>; /** * 提取日志. * * 1. 浏览器环境返回 File, 把日志组装为 File 内容返回. * 2. 小程序环境返回 filePath 作为临时上传路径. * 3. 返回 undefined 则代表没有提取到内容, 就不要上传. */ extractLogs(): Promise<string | File | void>; /** * 日志上传完毕的钩子. (后续需要处理一些临时文件) */ afterUpload(): Promise<void>; } export declare type AdapterLogStorageData = { iid: number; level: string; text: string; time: number; }; /** * 网络能力 */ export declare type AdapterNet = { /** * 获取数据上报用的 网络字段 */ getNetworkStatus: () => Promise<{ net_type: NIMENetworkType; net_connect: boolean; }>; /** * 网络监听事件 */ onNetworkStatusChange: (fn: (res: NIMENetworkStatusEvent) => void) => void; /** * 取消网络监听 */ offNetworkStatusChange: () => void; }; /** * 网络监听事件的回调的回参 */ export declare type NIMENetworkStatusEvent = { /** * 当前是否有网络连接 */ isConnected: boolean; /** * 网络类型 */ networkType: NIMENetworkType; }; export declare const enum NIMENetworkType { /** * 未知 */ kStatNetTypeUnkonw = 0, /** * 有线网络 */ kStatNetTypeEthernet = 1, kStatNetTypeWifi = 2, kStatNetType2G = 3, kStatNetType3G = 4, kStatNetType4G = 5, kStatNetType5G = 6 } declare let AdapterWebSocketWrapper: { prototype: AdapterWebSocket; new (url: string, protocols?: string): AdapterWebSocket; }; export interface AdapterWebSocket { close(code?: number, reason?: string): void; /** Transmits data using the WebSocket connection. data can be a string, a Blob, an ArrayBuffer, or an ArrayBufferView. */ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void; onclose: ((this: AdapterWebSocket, ev: CloseEvent) => any) | null; onerror: ((this: AdapterWebSocket, ev: Event) => any) | null; onmessage: ((this: AdapterWebSocket, ev: MessageEvent) => any) | null; onopen: ((this: AdapterWebSocket, ev: Event) => any) | null; binaryType: string; readonly CLOSED: number; readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; } export interface AdapterStorage { clear(): void; getItem(key: string): string | null; removeItem(key: string): void; setItem(key: string, value: string): void; } export declare type AdapterRequestMethodNames = 'GET' | 'POST' | 'PUT' | 'OPTIONS' | 'DELETE' | 'OPTIONS' | 'CONNECT'; export interface AdapterRequestResult { data: any; headers: any; status: number; [key: string]: any; } export interface AdapterSystemInfo { /** * https://docs.popo.netease.com/lingxi/d722dd9717d940a6bff97b207bc06cb4 * * 登录 44 号字段。客户使用的 SDK 产物为,取值有: BROWSER, UNIAPP, MINIAPP, React Native */ libEnv: 'BROWSER' | 'UNIAPP' | 'MINIAPP' | 'React Native'; /** * 登录时的 42 号字段 * * https://docs.popo.netease.com/lingxi/d722dd9717d940a6bff97b207bc06cb4?xyz=1703642388639 */ userAgent: string; os: string; osVer: string; browser: string; browserVer: string; /** * 和 hostEnvEnum 一样,但是是字符串,表示脚本的运行环境。取值有: * * BROWSER, ELECTRON, H5, Weixin, Baidu, Ali, Tiktok, RN */ hostEnv: keyof typeof HostEnvTypes; /** * 登录时的 41 号字段 * * https://docs.popo.netease.com/lingxi/d722dd9717d940a6bff97b207bc06cb4?xyz=1703642388639 */ hostEnvEnum: HostEnvTypes; /** * 宿主环境的版本号 * - 浏览器:浏览器版本 * - 小程序:宿主App版本。比如微信、支付宝版本 */ hostEnvVer: string; /** * 宿主环境版本号 * - 浏览器:浏览器版本 * - 小程序:基础库版本 */ model: string; /** * 和 hostEnv 一样,但是更为精细。 * - 浏览器:platform.name * - 小程序:等于 hostEnv */ manufactor: string; pushDeviceInfo?: { PRODUCT: string; DEVICE: string; MANUFACTURER: string; }; } declare type AdapterFileProgressObject = { total: number; loaded: number; percentage: number; percentageText: string; }; export interface AdapterUploadFileResult { name: string; ext: string; bucketName: string; ctx: string; objectName: string; token: string; type: string; size: number; w?: number; h?: number; dur?: number; } export interface AdapterFileUploadInfo { bucketName: string; objectName: string; token: string; md5?: string; ctx?: string; payload?: any; } export interface AdapterUploadFileOptions { payload?: any; type?: 'image' | 'audio' | 'video' | 'file'; file?: File; fileInput?: string | HTMLInputElement; filePath?: string; blob?: Blob; dataURL?: string; maxSize?: number; nosScenes?: string; nosSurvivalTime?: number; md5?: string; nosToken: any; chunkUploadHost: string; chunkUploadHostBackupList: string[]; commonUploadHost: string; commonUploadHostBackupList: string[]; headers?: { [key: string]: string; }; onUploadStart?: (task: { abort: () => void; [key: string]: any; }) => void; onUploadProgress?: (obj: AdapterFileProgressObject) => void; } export interface AdapterRequestParams { method: AdapterRequestMethodNames; headers?: { [key: string]: string; }; data?: { [key: string]: string | number | any; }; params?: { [key: string]: string | number | any; }; timeout?: number; /** * 支付宝需要传 dataType: text 才能让 socket io 嗅探请求不挂 */ dataType: string; } export declare function setAdapters(newAdapters: GetAdapterType): void; export {};