import { NIMAsyncFuncOptions, NIMAsyncFuncOptionsSuccessRes, NIMAsyncFuncPromiseify, NIMAudioFile, NIMError, NIMFile, NIMFileType, NIMImageFile, NIMProcessImageType, NIMVideoFile } from './Basic';
import { AnyIndexObject, ArrayOr, LiteralUnion, NullOr, Param1Type, UnionToTuple } from '@22g/utility-types';
import { NIMTeam } from './Team';
import { NIMCustomMessage, NIMFileMessage, NIMGeoMessage, NIMLocalMessageWrapper, NIMMessage, NIMMessageType, NIMSceneType, NIMSendMsgCommon, NIMTextMessage, NIMTipMessage } from './Message';
import { NIMSystemMessage } from './SystemMessage';
import { NIMUser } from './User';
import { NIMFriend } from './Friend';
import { NIMServerSession, NIMSession } from './Session';
import { NIMTeamMember } from './TeamMember';
import { NIMMarkInfo, NIMRelation } from './Relation';
import { NIMSuperTeam } from './SuperTeam';
import { NIMSuperTeamMember } from './SuperTeamMember';
import { NIMLoginPort } from './LoginPort';
import { NIMChatroomInfo } from './ChatroomInfo';


/**
 * [🔗 接受入群邀请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#acceptTeamInvite__anchor)
 * - [[NIM.acceptTeamInvite|`NIM.acceptTeamInvite`]]
 */
export interface NIMAcceptTeamInviteOpts extends NIMAsyncFuncOptions {
  /** 对应的系统通知的 */
  idServer: NIMSystemMessage['idServer'];
  /** 群id */
  teamId: NIMTeam['teamId'];
  /** 邀请方的帐号 */
  from: NIMSystemMessage['from'];
}

/**
 * [🔗 直接加为好友](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addFriend__anchor)
 * - [[NIM.addFriend|`NIM.addFriend`]]
 */
export interface NIMAddFriendOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}, { friend: T }> {
  /** 要直接加为好友的账号 */
  account: T['account'];
  /** 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: NIMSystemMessage['ps'];
}



/**
 * [🔗 拉人入超大群，无需对方同意](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addSuperTeamMembers__anchor)
 * - [[NIM.addSuperTeamMembers|`NIM.addSuperTeamMembers`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMAddSuperTeamMembersOpts<T extends NIMSuperTeamMember = NIMSuperTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 要拉入的账号 */
  accounts: Array<T['account']>;
}

/**
 * [🔗 添加群管理员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addTeamManagers__anchor)
 * - [[NIM.addTeamManagers|`NIM.addTeamManagers`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMAddTeamManagersOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 要添加的管理员帐号列表 */
  accounts: Array<T['account']>;
}


/**
 * [🔗 拉人入群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addTeamMembers__anchor)
 * - [[NIM.addTeamMembers|`NIM.addTeamMembers`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMAddTeamMembersOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 要拉进群的成员的帐号列表 */
  accounts: Array<T['account']>;
  /** 自定义扩展字段，选填，最长512字符，开发者也可以使用JSON格式的字符串来扩展此内容 */
  custom?: T['custom'];
  /** 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: NIMSystemMessage['ps'];
}



/**
 * [🔗 加入黑名单](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addToBlacklist__anchor)
 * - [[NIM.addToBlacklist|`NIM.addToBlacklist`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMAddToBlacklistOpts extends NIMAsyncFuncOptions<{}, NIMMarkInfo<true>> {
  /** 要加入黑名单的账号 */
  account: NIMMarkInfo['account'];
}

/**
 * [🔗 加入静音列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#addToMutelist__anchor)
 * - [[NIM.addToMutelist|`NIM.addToMutelist`]]
 */
export interface NIMAddToMutelistOpts extends NIMAsyncFuncOptions<{}, NIMMarkInfo<true>> {
  /** 要加入静音列表的账号 */
  account: NIMMarkInfo['account'];
}


/**
 * [🔗 申请加好友](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#applyFriend__anchor)
 * - [[NIM.applyFriend|`NIM.applyFriend`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMApplyFriendOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}> {
  account: T['account'];
  /** 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: NIMSystemMessage['ps'];
}


/**
 * [🔗 申请入群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#applyTeam__anchor)
 * - [[NIM.applyTeam|`NIM.applyTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMApplyTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: NIMSystemMessage['ps'];
}

/**
 * [🔗 语音转文字](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#audioToText__anchor)
 * - [[NIM.audioToText|`NIM.audioToText`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMAudioToTextOpts<T extends NIMAudioFile = NIMAudioFile> extends NIMAsyncFuncOptions<{}> {
  /** 音频 url */
  url: T['url'];
}


/**
 * [🔗 高斯模糊](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#blurImage__anchor)
 * - [[NIM.blurImage|`NIM.blurImage`]]
 */
export interface NIMBlurImageOpts extends NIMAsyncFuncOptions<{}> {
  url: string;
  /** 高斯模糊半径, 不包含中心点的像素, 取值范围 [1,50] */
  radius?: number;
  /** 高斯模糊标准差, 不能小于 0 */
  sigma?: number;
}


/**
 * [🔗 删除单人会话服务器聊天记录](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#clearServerHistoryMsgs__anchor)
 * - [[NIM.clearServerHistoryMsgs|`NIM.clearServerHistoryMsgs`]]
 */
export interface NIMClearServerHistoryMsgsOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}> {
  /** 对方账号 */
  account: T['to'];
  /**
   * 是否同时删除漫游
   * @default true
   */
  delRoam?: boolean;
}


/**
 * [🔗 创建群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#createTeam__anchor)
 * - [[NIM.createTeam|`NIM.createTeam`]]
 */
export interface NIMCreateTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<
  Pick<T, 'type' | 'name' | 'avatar'> & Partial<Pick<T, 'intro' | 'announcement' | 'joinMode' | 'beInviteMode' | 'inviteMode' | 'updateTeamMode' | 'updateCustomMode' | 'custom'>>,
  { team: T }
  > {
  accounts: Array<NIMUser['account']>;
  ps?: NIMSystemMessage['ps'];
}


/**
 * [🔗 裁剪图片](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#cropImage__anchor)
 * - [[NIM.cropImage|`NIM.cropImage`]]
 */
export interface NIMCropImageOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 起点坐标 x, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height */
  x: number;
  /** 起点坐标 y, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height */
  y: number;
  /** 宽度, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height */
  width: number;
  /** 高度, 必须需为整数, 此方法内部使用 Math.round 来格式化 x/y/width/height */
  height: number;
}


/**
 * [🔗 删除本地所有消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteAllLocalMsgs__anchor)
 * - [[NIM.deleteAllLocalMsgs|`NIM.deleteAllLocalMsgs`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteAllLocalMsgsOpts extends NIMAsyncFuncOptions<{}> {

}


/**
 * [🔗 删除本地所有系统通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteAllLocalSysMsgs__anchor)
 * - [[NIM.deleteAllLocalSysMsgs|`NIM.deleteAllLocalSysMsgs`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteAllLocalSysMsgsOpts extends NIMAsyncFuncOptions<{}> {

}

/**
 * [🔗 删除好友](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteFriend__anchor)
 * - [[NIM.deleteFriend|`NIM.deleteFriend`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteFriendOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}> {
  account: T['account'];
  /**
   * 是否删除好友备注
   * @default false
   */
  delAlias?: boolean;
}

/**
 * [🔗 删除本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalMsg__anchor)
 * - [[NIM.deleteLocalMsg|`NIM.deleteLocalMsg`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalMsgOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  /** 待删除的消息 */
  msg: T;
}

/**
 * [🔗 根据会话ID、起始时间等条件删除本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalMsgs__anchor)
 * - [[NIM.deleteLocalMsgs|`NIM.deleteLocalMsgs`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalMsgsOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  sessionId: T['sessionId'];
  /**
   * 开始时间，毫秒时间戳，默认为负无穷大
   * @default -Infinity
   */
  start?: number;
  /**
   * 结束时间，毫秒时间戳，默认为无穷大
   * @default Infinity
   */
  end?: number;
}

/**
 * [🔗 删除某个会话的本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalMsgsBySession__anchor)
 * - [[NIM.deleteLocalMsgsBySession|`NIM.deleteLocalMsgsBySession`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalMsgsBySessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}> {
  scene: T['scene'];
  to: T['to'];
  /**
   * 是否同时删除本地会话对象中的的lastMsg
   * @default false
   */
  delLastMsg?: boolean;
  /**
   * 是否为标记删除，若为true，则SDK会记录本地清空会话的时间戳，再调用获取历史消息或获取包含关键词的历史消息接口时，便不能再获取到该时间戳之前的消息了
   * @default false
   */
  isTag?: boolean;
}


/**
 * [🔗 删除本地会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalSession__anchor)
 * - [[NIM.deleteLocalSession|`NIM.deleteLocalSession`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalSessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}> {
  id: ArrayOr<T['id']>;
}

/**
 * [🔗 删除本地系统通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalSysMsg__anchor)
 * - [[NIM.deleteLocalSysMsg|`NIM.deleteLocalSysMsg`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalSysMsgOpts<T extends NIMSystemMessage = NIMSystemMessage> extends NIMAsyncFuncOptions<{}> {
  idServer: ArrayOr<T['idServer']>;
}

/**
 * [🔗 删除teamId对应的本地群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteLocalTeam__anchor)
 * - [[NIM.deleteLocalTeam|`NIM.deleteLocalTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteLocalTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamId: ArrayOr<T['teamId']>;
}


/**
 * [🔗 撤回消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteMsg__anchor)
 * - [[NIM.deleteMsg|`NIM.deleteMsg`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteMsgOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  /** 待撤回的消息 */
  msg: T;
  /** 自定义推送文案 */
  apnsText?: string;
  /** 第三方自定义的推送属性，限制json字符串，长度最大2048 */
  pushPayload?: string;
  /** 附言 */
  ps?: string;
}


/**
 * [🔗 删除服务器上的会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteSession__anchor)
 * - [[NIM.deleteSession|`NIM.deleteSession`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteSessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}> {
  scene: T['scene'];
  to: T['to'];
}


/**
 * [🔗 批量删除服务器上的会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteSessions__anchor)
 * - [[NIM.deleteSessions|`NIM.deleteSessions`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDeleteSessionsOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}> {
  sessions: T[];
}


/**
 * [🔗 解散群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#dismissTeam__anchor)
 * - [[NIM.dismissTeam|`NIM.dismissTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMDismissTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
}

/**
 * [🔗 转发消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#forwardMsg__anchor)
 * - [[NIM.forwardMsg|`NIM.forwardMsg`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMForwardMsgOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  msg: T;
  /** 新的场景 */
  scene: T['scene'];
  /** 新的接收方, 对方帐号或者群id */
  to: T['to'];
}


/**
 * [🔗 获取超大群成员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getAllSuperTeamMembers__anchor)
 * - [[NIM.getAllSuperTeamMembers|`NIM.getAllSuperTeamMembers`]]
 */
export interface NIMGetAllSuperTeamMembersOpts<T extends NIMSuperTeamMember = NIMSuperTeamMember> extends NIMAsyncFuncOptions<
  {}, {
    /** 是已全部返回 */
    isAll: boolean;
    /** 群成员 */
    members: T[];
  }
  > {
  teamId: T['teamId'];
}


/**
 * [🔗 获取聊天室服务器地址](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getChatroomAddress__anchor)
 * - [[NIM.getChatroomAddress|`NIM.getChatroomAddress`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMGetChatroomAddressOpts<T extends NIMChatroomInfo = NIMChatroomInfo> extends NIMAsyncFuncOptions<{}> {
  chatroomId: T['id'];
}


/**
 * [🔗 获取好友列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getFriends__anchor)
 * - [[NIM.getFriends|`NIM.getFriends`]]
 */
export interface NIMGetFriendsOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}, T[]> {

}

/**
 * [🔗 搜索历史记录](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#searchHistoryMsgs__anchor)
 * - [[NIM.searchHistoryMsgs]]
 */
export interface NIMSearchHistoryMsgsOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msgs: T }> {
  /** 搜索关键词 */
  keyword: string;
  scene: T[];
  to: T['to'];

}

/**
 * [🔗 获取云端历史记录](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getHistoryMsgs__anchor)
 * - [[NIM.getHistoryMsgs|`NIM.getHistoryMsgs`]]
 */
export interface NIMGetHistoryMsgsOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msgs: T[] }> {
  scene: T['scene'];
  to: T['to'];
  /**
   * 开始时间时间戳(ms)
   * @default 0
   */
  beginTime?: number;
  /**
   * 结束时间时间戳(ms)
   * @default [服务器的当前时间]
   */
  endTime?: number;
  /** 上次查询的最后一条消息的 [[NIMMessage.idServer|`NIMMessage.idServer`]]，第一次不填 */
  lastMsgId?: T['idServer'];
  /**
   * 本次查询的消息数量，最多100条
   * @default 100
   */
  limit?: number;
  /**
   * - `false`表示从 [[NIMGetHistoryMsgsOpts.endTime|`NIMGetHistoryMsgsOpts.endTime`]] 开始往前查找历史消息;
   * - `true`表示从 [[NIMGetHistoryMsgsOpts.beginTime|`NIMGetHistoryMsgsOpts.beginTime`]] 开始往后查找历史消息
   * @default false
   */
  reverse?: boolean;
  /**
   * - `false`表示返回的消息按时间逆序排序;
   * - `true`表示按时间正序排序
   * @default false
   */
  asc?: boolean;
  /** 消息类型列表，默认全部消息类型 */
  msgType?: Array<T['type']>;
}


/**
 * [🔗 获取 idClient对应的本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalMsgByIdClient__anchor)
 * - [[NIM.getLocalMsgByIdClient|`NIM.getLocalMsgByIdClient`]]
 */
export interface NIMGetLocalMsgByIdClientOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msg: NIMLocalMessageWrapper<T> }> {
  /** [[NIMMessage.idClient|`NIMMessage.idClient`]] */
  idClient: T['idClient'];
}

/**
 * [🔗 获取本地历史记录](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalMsgs__anchor)
 * - [[NIM.getLocalMsgs|`NIM.getLocalMsgs`]]
 */
export interface NIMGetLocalMsgsOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msgs: Array<NIMLocalMessageWrapper<T>> }> {
  /** 如果提供该参数, 那么查询该会话的消息 */
  sessionId?: T['sessionId'];
  /**
   * 开始时间
   * @default 0
   */
  start?: number;
  /**
   * 结束时间
   * @default Infinity
   */
  end?: number;
  /**
   * true 表示从 end 开始查, false 表示从 begin 开始查
   * @default true
   */
  desc?: boolean;
  /**
   * 数量限制
   * @default 100
   */
  limit?: number;
  /** 消息类型, [indexedDB专用]如果提供该参数, 那么查询该类型的消息 */
  type?: T['type'];
  /** [indexedDB专用]如果提供该参数, 那么查询这几种类型的消息 */
  types?: Array<T['type']>;
  /** [indexedDB专用]如果提供参数, 那么查询匹配该关键词的消息 */
  keyword?: string;
  /** [indexedDB专用]可选参数, 过滤函数, 接收消息对象, 返回 true 表示结果保留该消息 */
  filterFunc?(msg: T): boolean;
}

/**
 * [🔗 获取 idClients 对应的本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalMsgsByIdClients__anchor)
 * - [[NIM.getLocalMsgsByIdClients|`NIM.getLocalMsgsByIdClients`]]
 */
export interface NIMGetLocalMsgsByIdClientsOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msgs: Array<NIMLocalMessageWrapper<T>> }> {
  /** [[NIMMessage.idClient|`NIMMessage.idClient`]] */
  idClients: Array<T['idClient']>;
}

/**
 * 通过 sessionId [🔗 获取本地会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalSession__anchor)
 * - [[NIM.getLocalSession|`NIM.getLocalSession`]]
 */
export interface NIMGetLocalSessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}, T> {
  sessionId?: T['id'];
}

/**
 * [🔗 获取本地会话列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalSessions__anchor)
 * - [[NIM.getLocalSessions|`NIM.getLocalSessions`]]
 */
export interface NIMGetLocalSessionsOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}, { sessions: T[] }> {
  /** 上次查询的最后一条会话的id, 第一次不填 */
  lastSessionId?: T['id'];
  /**
   * 数量
   * @default 100
   */
  limit?: number;
  /**
   * - `false` 表示从最近的会话开始往前查找本地会话；
   * - `true` 表示从第一条会话开始往后查找本地会话
   * @default false
   */
  reverse?: boolean;
}

/**
 * [🔗 获取本地会话列表，](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalSessionsByMsgType__anchor)
 * - [[NIM.getLocalSessionsByMsgType|`NIM.getLocalSessionsByMsgType`]]
 * - 开发者可以指定排除lastMsg的类型，比如获取每个会话中非通知类型的消息
 */
export interface NIMGetLocalSessionsByMsgTypeOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}, { sessions: T[] }> {
  /**
   * - lastMsg 要排除的类型，具体参见 [[NIMMessageType|`消息类型`]]，如不填，表示lastMsg不排除任何类型
   */
  exclude?: ArrayOr<NIMMessageType>;
}


/**
 * [🔗 获取本地系统通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalSysMsgs__anchor)
 * - [[NIM.getLocalSysMsgs|`NIM.getLocalSysMsgs`]]
 */
export interface NIMGetLocalSysMsgsOpts<T extends NIMSystemMessage = NIMSystemMessage> extends NIMAsyncFuncOptions<{}, { sysMsgs: T[] }> {
  category?: T['category'];
  type?: T['type'];
  /**
   * - 如果不传, 默认获取所有已读和未读的系统通知
   * - 如果传 `true`, 那么只获取已读的系统通知
   * - 如果传 `false`, 那么只获取未读的系统通知
   */
  read?: boolean;
  /** 上次查询的最后一条系统通知的 [[NIMSystemMessage.idServer|`NIMSystemMessage.idServer`]], 第一次不填 */
  lastIdServer?: T['idServer'];
  /**
   * 数量
   * @default 100
   */
  limit?: number;
  /**
   * - `false` 表示从最近的系统通知开始往前查找本地系统通知
   * - `true` 表示从第一条系统通知开始往后查找本地系统通知
   * @default false
   */
  reverse?: boolean;
}

/**
 * [🔗 获取本地群组](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getLocalTeams__anchor)
 * - [[NIM.getLocalTeams|`NIM.getLocalTeams`]]
 */
export interface NIMGetLocalTeamsOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}, { teams: T }> {
  teamIds: Array<T['teamId']>;
}


/**
 * [🔗 获取群禁言成员列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getMutedTeamMembers__anchor)
 * - [[NIM.getMutedTeamMembers|`NIM.getMutedTeamMembers`]]
 */
export interface NIMGetMutedTeamMembersOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}, T[]> {
  teamId: T['teamId'];
}

/**
 * [🔗 获取黑名单和静音列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getRelations__anchor)
 * - [[NIM.getRelations|`NIM.getRelations`]]
 */
export interface NIMGetRelationsOpts<T extends NIMRelation = NIMRelation> extends NIMAsyncFuncOptions<{}, { blacklist: T[], mutelist: T[] }> {

}

/**
 * [🔗 获取超大群信息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getSuperTeam__anchor)
 * - [[NIM.getSuperTeam|`NIM.getSuperTeam`]]
 */
export interface NIMGetSuperTeamOpts<T extends NIMSuperTeam = NIMSuperTeam> extends NIMAsyncFuncOptions<{}, T> {
  teamId: T['teamId'];
}

/**
 * [🔗 根据进群时间，分页获取超大群成员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getSuperTeamMembersByJoinTime__anchor)
 * - [[NIM.getSuperTeamMembersByJoinTime|`NIM.getSuperTeamMembersByJoinTime`]]
 */
export interface NIMGetSuperTeamMembersByJoinTimeOpts<T extends NIMSuperTeamMember = NIMSuperTeamMember> extends NIMAsyncFuncOptions<{}, T[]> {
  teamId: T['teamId'];
  /**
   * 获取在该时间以后进群的群成员
   * @default 0
   */
  joinTime?: number;
  /**
   * 数量
   * @default 100
   */
  limit?: number;
  /**
   * - `false` 获取joinTime之后进群的群成员，按时间正序排列
   * - `true` 获取joinTime之前进群的群成员，按时间逆序排列
   * @default false
   */
  reverse?: boolean;
}

/**
 * [🔗 获取所在的超大群列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getSuperTeams__anchor)
 * - [[NIM.getSuperTeams|`NIM.getSuperTeams`]]
 */
export interface NIMGetSuperTeamsOpts<T extends NIMSuperTeam = NIMSuperTeam> extends NIMAsyncFuncOptions<{}, T[]> {

}

/**
 * [🔗 获取群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getTeam__anchor)
 * - [[NIM.getTeam|`NIM.getTeam`]]
 */
export interface NIMGetTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}, T> {
  teamId: T['teamId'];
}

/**
 * [🔗 通过群ID及成员账号获取群成员信息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#通过群ID及成员账号获取群成员信息__anchor)
 * - [[NIM.getTeamMemberByTeamIdAndAccount|`NIM.getTeamMemberByTeamIdAndAccount`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMGetTeamMemberByTeamIdAndAccountOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}, { members: T }> {
  teamId: T['teamId'];
  /** 群成员账号 */
  account: T['account'];
}

/**
 * [🔗 获取群成员的邀请者accid](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#获取群成员的邀请者accid__anchor)
 * - [[NIM.getTeamMemberInvitorAccid|`NIM.getTeamMemberInvitorAccid`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMGetTeamMemberInvitorAccidOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}, AnyIndexObject> {
  teamId: T['teamId'];
  /** 表示需要查询邀请者accid的群成员账号列表，一次最多查200个。当群成员数量小于等于200时为可选参数，不填默认查全部成员；群成员数量大于200时，需要将成员列表分批多次调用此接口查询。 */
  accounts: Array<T['account']>;
}

/**
 * [🔗 获取群成员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getTeamMembers__anchor)
 * - [[NIM.getTeamMembers|`NIM.getTeamMembers`]]
 */
export interface NIMGetTeamMembersOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}, { members: T }> {
  teamId: T['teamId'];
}

/**
 * [🔗 查询群组已读、未读账号列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getTeamMsgReadAccounts__anchor)
 * - [[NIM.getTeamMsgReadAccounts|`NIM.getTeamMsgReadAccounts`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMGetTeamMsgReadAccountsOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}, { members: T }> {
  teamMsgReceipt: {
    teamId: T['teamId'];
    idServer: NIMMessage['idServer'];
  };
}

/**
 * [🔗 查询群组消息已读、未读数量](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getTeamMsgReads__anchor)
 * - [[NIM.getTeamMsgReads|`NIM.getTeamMsgReads`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMGetTeamMsgReadsOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}, AnyIndexObject> {
  teamMsgReceipts: Array<{
    teamId: T['teamId'];
    idServer: NIMMessage['idServer'];
  }>;
}

/**
 * [🔗 获取群列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getTeams__anchor)
 * - [[NIM.getTeams|`NIM.getTeams`]]
 */
export interface NIMGetTeamsOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}, T[]> {

}

/**
 * [🔗 获取用户信息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getUser__anchor)
 * - [[NIM.getUser|`NIM.getUser`]]
 */
export interface NIMGetUserOpts<T extends NIMUser = NIMUser> extends NIMAsyncFuncOptions<{}, T> {
  account: T['account'];
}

/**
 * [🔗 获取用户信息数组](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getUsers__anchor)
 * - [[NIM.getUsers|`NIM.getUsers`]]
 */
export interface NIMGetUsersOpts<T extends NIMUser = NIMUser> extends NIMAsyncFuncOptions<{}, T[]> {
  accounts: Array<T['account']>;
}

/**
 * [🔗 插入一条本地会话记录](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#insertLocalSession__anchor)
 * - [[NIM.insertLocalSession|`NIM.insertLocalSession`]]
 */
export interface NIMInsertLocalSessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}, { session: T }> {
  /** 会话场景 */
  scene: T['scene'];
  /** 账号或群ID */
  to: T['to'];
  /** 可选, 会话更新的时间, 如果不填, SDK 会设置一个比当前所有会话更新时间大的一个时间 */
  updateTime?: T['updateTime'];
}

/**
 * interlace [🔗 图片](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#interlaceImage__anchor)
 * - [[NIM.interlaceImage|`NIM.interlaceImage`]]
 */
export interface NIMInterlaceImageOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 原图 url */
  url: string;
}

/**
 * [🔗 踢当前用户登录的其它端](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#kick__anchor)
 * - [[NIM.kick|`NIM.kick`]]
 */
export interface NIMKickOpts<T extends NIMLoginPort = NIMLoginPort> extends NIMAsyncFuncOptions<{}, { deviceIds: Array<T['deviceId']> }> {
  /** 要踢出的设备id */
  deviceIds: Array<T['deviceId']>;
}

/**
 * [🔗 主动退超级群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#leaveSuperTeam__anchor)
 * - [[NIM.leaveSuperTeam|`NIM.leaveSuperTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMLeaveSuperTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}, unknown> {
  teamId: T['teamId'];
}

/**
 * [🔗 主动退群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#leaveTeam__anchor)
 * - [[NIM.leaveTeam|`NIM.leaveTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMLeaveTeamOpts<T extends NIMSuperTeam = NIMSuperTeam> extends NIMAsyncFuncOptions<{}, unknown> {
  teamId: T['teamId'];
}

/**
 * [🔗 加入黑名单/从黑名单移除](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#markInBlacklist__anchor)
 * - [[NIM.markInBlacklist|`NIM.markInBlacklist`]]
 */
export interface NIMMarkInBlacklistOpts extends NIMAsyncFuncOptions<NIMMarkInfo, NIMMarkInfo> {

}

/**
 * [🔗 加入静音列表/从静音列表移除](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#markInMutelist__anchor)
 * - [[NIM.markInMutelist|`NIM.markInMutelist`]]
 */
export interface NIMMarkInMutelistOpts extends NIMAsyncFuncOptions<NIMMarkInfo, NIMMarkInfo> {

}

/**
 * [🔗 标记系统通知为已收到](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#markSysMsgRead__anchor)
 * - [[NIM.markSysMsgRead|`NIM.markSysMsgRead`]]
 */
export interface NIMMarkSysMsgReadOpts<T extends NIMSystemMessage = NIMSystemMessage> extends NIMAsyncFuncOptions<{}, unknown> {
  sysMsgs: ArrayOr<T>;
}


/**
 * [🔗 群组禁言](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#muteTeamAll__anchor)
 * - [[NIM.muteTeamAll|`NIM.muteTeamAll`]]
 */
export interface NIMMuteTeamAllOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 禁言类型 none: 不禁言 normal: 普通成员禁言 all: 全部禁言(包括群主) */
  type: T['muteType'];
}

/**
 * [🔗 是否需要群消息通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#notifyForNewTeamMsg__anchor)
 * - [[NIM.notifyForNewTeamMsg|`NIM.notifyForNewTeamMsg`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMNotifyForNewTeamMsgOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamIds: Array<T['teamId']>;
}


/**
 * [🔗 通过好友申请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#passFriendApply__anchor)
 * - [[NIM.passFriendApply|`NIM.passFriendApply`]]
 */
export interface NIMPassFriendApplyOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}, { friend: NIMFriend }> {
  /** 对应的系统通知的 idServer */
  idServer: NIMSystemMessage['idServer'];
  /** 要通过好友申请的账号 */
  account: NIMFriend['account'];
  /** 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: NIMSystemMessage['ps'];
}


/**
 * [🔗 通过入群申请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#passTeamApply__anchor)
 * - [[NIM.passTeamApply|`NIM.passTeamApply`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMPassTeamApplyOpts extends NIMAsyncFuncOptions<{}> {
  /** 对应的系统通知的 idServer */
  idServer: NIMSystemMessage['idServer'];
  /** 要通过好友申请的账号 */
  teamId: NIMTeam['teamId'];
  /** 申请方的帐号 */
  from: NIMSystemMessage['from'];
}

/**
 * [🔗 预览文件](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#previewFile__anchor)
 * - [[NIM.previewFile|`NIM.previewFile`]]
 */
export interface NIMPreviewFileOpts extends NIMAsyncFuncOptions<{}, NIMImageFile | NIMVideoFile | NIMAudioFile | NIMFile> {
  /** 文件过滤器 */
  type?: NIMFileType;
  fileInput?: Param1Type<Document['getElementById']> | HTMLElement;
  /** 限制文件的大小 */
  maxSize?: number;
  /** 使用普通上传 */
  commonUpload?: boolean;
  /** Blob对象 */
  blob?: Blob;
  /** 包含 MIME type 和 base64 数据的 data URL */
  dataURL?: string;
  uploadprogress?: XMLHttpRequest['onprogress'];
  /**
   * 存储场景，不传默认实例化配置
   * @default 'im'
   */
  nosScenes?: string;
  /** 存储有效时间，不传默认实例化配置 不得小于一天，单位`秒` */
  nosSurvivalTime?: number;
}

/**
 * [🔗 处理图片](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#processImage__anchor)
 * - [[NIM.processImage|`NIM.processImage`]]
 * - TODO: 未完成
 */
export interface NIMProcessImageOpts extends NIMAsyncFuncOptions<AnyIndexObject, { url: string }> {
  /** 原图URL */
  url: string;
  /** 操作序列 */
  opts: Array<
    NIMProcessImageProcessItem<NIMQualityImageOpts, NIMProcessImageType.quality>
    | NIMProcessImageProcessItem<NIMRotateImageOpts, NIMProcessImageType.rotate>
    | NIMProcessImageProcessItem<NIMInterlaceImageOpts, NIMProcessImageType.interlace>
    | NIMProcessImageProcessItem<NIMBlurImageOpts, NIMProcessImageType.blur>
    | NIMProcessImageProcessItem<NIMCropImageOpts, NIMProcessImageType.crop>
    | NIMProcessImageProcessItem<NIMThumbnailImageOpts, NIMProcessImageType.thumbnail>
  >;
}

type NIMProcessImageProcessItem<O extends NIMAsyncFuncOptions<{}>, T extends NIMProcessImageType> = Omit<O, keyof NIMProcessImageOpts> & {
  type: T;
};


/**
 * [🔗 修改图片质量](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#qualityImage__anchor)
 * - [[NIM.qualityImage|`NIM.qualityImage`]]
 */
export interface NIMQualityImageOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 原图URL */
  url: string;
  /** 图片质量, 必须为整数, 取值范围为 0-100, 此方法内部使用 Math.round 来格式化 quality */
  quality: number;
}

/**
 * [🔗 拒绝好友申请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#rejectFriendApply__anchor)
 * - [[NIM.rejectFriendApply|`NIM.rejectFriendApply`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMRejectFriendApplyOpts extends NIMAsyncFuncOptions<{}> {
  /** 对应的系统通知的 idServer */
  idServer: NIMSystemMessage['idServer'];
  /** 要拒绝好友申请的账号 */
  account: NIMFriend['account'];
  /** 附言, */
  ps?: NIMSystemMessage['ps'];
}


/**
 * [🔗 拒绝入群申请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#rejectTeamApply__anchor)
 * - [[NIM.rejectTeamApply|`NIM.rejectTeamApply`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMRejectTeamApplyOpts extends NIMAsyncFuncOptions<{}> {
  /** 对应的系统通知的 idServer */
  idServer: NIMSystemMessage['idServer'];
  teamId: NIMTeam['teamId'];
  /** 申请方的帐号 */
  from: NIMTeamMember['account'];
  /** 附言 */
  ps?: NIMSystemMessage['ps'];
}


/**
 * [🔗 拒绝入群邀请](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#rejectTeamInvite__anchor)
 * - [[NIM.rejectTeamInvite|`NIM.rejectTeamInvite`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMRejectTeamInviteOpts extends NIMAsyncFuncOptions<{}> {
  /** 对应的系统通知的 idServer */
  idServer: NIMSystemMessage['idServer'];
  teamId: NIMTeam['teamId'];
  /** 邀请方的帐号 */
  from: NIMTeamMember['account'];
  /** 附言 */
  ps?: NIMSystemMessage['ps'];
}

/**
 * [🔗 从黑名单移除](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeFromBlacklist__anchor)
 * - [[NIM.removeFromBlacklist|`NIM.removeFromBlacklist`]]
 */
export interface NIMRemoveFromBlacklistOpts extends NIMAsyncFuncOptions<{}, NIMMarkInfo<false>> {
  account: NIMMarkInfo['account'];
}


/**
 * [🔗 从静音列表移除](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeFromMutelist__anchor)
 * - [[NIM.removeFromMutelist|`NIM.removeFromMutelist`]]
 */
export interface NIMRemoveFromMutelistOpts extends NIMAsyncFuncOptions<{}, NIMMarkInfo<false>> {
  account: NIMMarkInfo['account'];
}

/**
 * [🔗 踢人出超级群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeSuperTeamMembers__anchor)
 * - [[NIM.removeSuperTeamMembers|`NIM.removeSuperTeamMembers`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMRemoveSuperTeamMembersOpts extends NIMAsyncFuncOptions<{}> {
  teamId: NIMSuperTeamMember['teamId'];
  /** 要移除的成员帐号列表 */
  account: Array<NIMSuperTeamMember['account']>;
}


/**
 * [🔗 移除群管理员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeTeamManagers__anchor)
 * - [[NIM.removeTeamManagers|`NIM.removeTeamManagers`]]
 */
export interface NIMRemoveTeamManagersOpts extends NIMAsyncFuncOptions<{}> {
  teamId: NIMTeamMember['teamId'];
  /** 要移除的管理员帐号列表 */
  account: Array<NIMTeamMember['account']>;
}

/**
 * [🔗 踢人出群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeTeamMembers__anchor)
 * - [[NIM.removeTeamMembers|`NIM.removeTeamMembers`]]
 */
export interface NIMRemoveTeamMembersOpts extends NIMAsyncFuncOptions<{}> {
  teamId: NIMTeamMember['teamId'];
  /** 要移除的成员帐号列表 */
  account: Array<NIMTeamMember['account']>;
}

/**
 * [🔗 旋转图片](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#rotateImage__anchor)
 * - [[NIM.rotateImage|`NIM.rotateImage`]]
 */
export interface NIMRotateImageOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 原图Url */
  url: string;
  /** 旋转的角度, 正整数表示顺时针, 负整数表示逆时针, 必须为整数, 此方法内部会先将 angle 格式化为 [0, 360] 范围内的数字, 然后使用 Math.round 来格式化 angle */
  angle: number;
}


/**
 * [🔗 发送自定义消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendCustomMsg__anchor)
 * - [[NIM.sendCustomMsg|`NIM.sendCustomMsg`]]
 */
export interface NIMSendCustomMsgOpts<T extends NIMCustomMessage = NIMCustomMessage> extends NIMAsyncFuncOptions<NIMSendMsgCommon, T> {
  /** 自定义消息的消息内容, 推荐使用JSON格式构建 */
  content: NIMCustomMessage['content'];
}

/**
 * [🔗 发送自定义系统通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendCustomSysMsg__anchor)
 * - [[NIM.sendCustomSysMsg|`NIM.sendCustomSysMsg`]]
 */
export interface NIMSendCustomSysMsgOpts<T extends NIMSystemMessage = NIMSystemMessage> extends NIMAsyncFuncOptions<
  Pick<T, 'scene' | 'to'> & Partial<Pick<T, 'apnsText' | 'pushPayload' | 'cc'>>
  > {
  /** 自定义系统通知的内容, 推荐使用JSON格式构建 */
  content: string;
  /**
   * 是否只发送给在线用户。
   * - `true` 时只发送给在线用户, 如果接收方不在线, 这条通知将被丢弃。适合发送即时通知, 比如正在输入。
   * - `false` 时假如接收方在线, 那么会立即收到该通知,假如接收方不在线, 会在其上线后推送过去。
   * @default true
   */
  sendToOnlineUsersOnly: T['sendToOnlineUsersOnly'];
  /**
   * 是否需要推送
   * @default true
   */
  isPushable: T['isPushable'];
  /**
   * 是否需要推送昵称
   * @default false
   */
  needPushNick: T['needPushNick'];
}

/**
 * [🔗 发送文件消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendFile__anchor)
 * - [[NIM.sendFile|`NIM.sendFile`]]
 */
export interface NIMSendFileOpts<T extends NIMFileMessage = NIMFileMessage> extends NIMAsyncFuncOptions<
  Omit<NIMPreviewFileOpts, keyof NIMAsyncFuncOptions<{}>> & NIMSendMsgCommon,
  T
  > {
  /** 文件对象, 开发者可以通过 预览文件[[NIM.previewFile|`NIM.previewFile`]] 拿到文件对象 */
  file?: NIMAsyncFuncOptionsSuccessRes<NIMPreviewFileOpts>;
  /** 仅供微信小程序使用, 通过 wx.chooseImage 或者 wx.startRecord 拿到的临时文件路径 */
  wxFilePath?: string;
  /**
   * 开始上传图片的回调
   * - 如果开发者传入 fileInput, 在此回调之前不能修改 fileInput
   * - 在此回调之后可以取消图片上传, 此回调会接收一个参数 upload, 调用 upload.abort(); 来取消文件上传
   */
  beginupload?(xhrInst: XMLHttpRequest): void;
  /**
   * 上传完成回调
   * - 此回调接收两个参数, error 和 obj
   * - 如果出错, error 包含详细的错误信息
   * - 如果上传成功, obj 包含详细的文件信息
   */
  uploaddone?(error: NullOr<NIMError>, file: NullOr<NIMAsyncFuncOptionsSuccessRes<NIMPreviewFileOpts>>): void;
  /** 发送文件消息之前的回调函数 */
  beforesend?(msg: NIMMessage): void;
}


/**
 * [🔗 发送地理位置](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendGeo__anchor)
 * - [[NIM.sendGeo|`NIM.sendGeo`]]
 */
export interface NIMSendGeoOpts<T extends NIMGeoMessage = NIMGeoMessage> extends NIMAsyncFuncOptions<NIMSendMsgCommon, T> {
  geo: T['geo'];
}


/**
 * [🔗 发送消息已读回执](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendMsgReceipt__anchor)
 * - [[NIM.sendMsgReceipt|`NIM.sendMsgReceipt`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMSendMsgReceiptOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  msg: T;
}

/**
 * [🔗 发送机器人消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendRobotMsg__anchor)
 * - [[NIM.sendRobotMsg|`NIM.sendRobotMsg`]]
 * - TODO: 未知用途，暂不定义
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMSendRobotMsgOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<NIMSendMsgCommon> {

}


/**
 * [🔗 标记群组消息已读](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendTeamMsgReceipt__anchor)
 * - [[NIM.sendTeamMsgReceipt|`NIM.sendTeamMsgReceipt`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMSendTeamMsgReceiptOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}> {
  teamMsgReceipts: Array<{
    teamId: NIMTeam['teamId'];
    idServer: T['idServer'];
  }>;
}


/**
 * [🔗 发送文本消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendText__anchor)
 * - [[NIM.sendText|`NIM.sendText`]]
 */
export interface NIMSendTextOpts<T extends NIMTextMessage = NIMTextMessage> extends NIMAsyncFuncOptions<NIMSendMsgCommon, T> {
  /** 文本消息内容 */
  text: T['text'];
}


/**
 * [🔗 发送提醒消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#sendTipMsg__anchor)
 * - [[NIM.sendTipMsg|`NIM.sendTipMsg`]]
 */
export interface NIMSendTipMsgOpts<T extends NIMTipMessage = NIMTipMessage> extends NIMAsyncFuncOptions<NIMSendMsgCommon, T> {
  /** 提醒内容 */
  tip: T['tip'];
}


/**
 * [🔗 去除图片元信息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#stripImageMeta__anchor)
 * - [[NIM.stripImageMeta|`NIM.stripImageMeta`]]
 */
export interface NIMStripImageMetaOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 原图URL */
  url: string;
}

/**
 * [🔗 生成缩略图](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#thumbnailImage__anchor)
 * - [[NIM.thumbnailImage|`NIM.thumbnailImage`]]
 */
export interface NIMThumbnailImageOpts extends NIMAsyncFuncOptions<{}, { url: string }> {
  /** 原图URL */
  url: string;
  width?: number;
  height?: number;
  /** 缩略模式, 目前支持以下三种模式, 请参考上面的描述 */
  mode: 'cover' | 'cover' | 'crop';
  axis?: {
    /** 'crop' 模式下控制最后一步裁剪的位置, 请参考上面的描述 */
    x?: number;
    /** 'crop' 模式下控制最后一步裁剪的位置, 请参考上面的描述 */
    y?: number;
  };
  /**
   * 当图片尺寸小于要缩略的尺寸时, 是否放大图片, 默认false不放大
   * @default false
   */
  enlarge?: boolean;
}


/**
 * [🔗 转让群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#transferTeam__anchor)
 * - [[NIM.transferTeam|`NIM.transferTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMTransferTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 新群主的帐号 */
  account: NIMUser['account'];
  /** 转让群的同时是否离开群 */
  leave: boolean;
}


/**
 * [🔗 更新好友](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateFriend__anchor)
 * - [[NIM.updateFriend|`NIM.updateFriend`]]
 */
export interface NIMUpdateFriendOpts<T extends NIMFriend = NIMFriend> extends NIMAsyncFuncOptions<{}, T> {
  account: T['account'];
  /** 备注 */
  alias: T['alias'];
  /** 扩展字段, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  custom: T['alias'];
}


/**
 * [🔗 修改自己的超级群属性](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateInfoInSuperTeam__anchor)
 * - [[NIM.updateInfoInSuperTeam|`NIM.updateInfoInSuperTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMUpdateInfoInSuperTeamOpts<T extends NIMSuperTeamMember = NIMSuperTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 在群里面的昵称 */
  nickInTeam?: T['nickInTeam'];
  /** 是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定 */
  muteTeam?: T['muteTeam'];
  /** 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串 */
  custom?: T['custom'];
}

/**
 * [🔗 修改自己的群属性](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateInfoInTeam__anchor)
 * - [[NIM.updateInfoInTeam|`NIM.updateInfoInTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMUpdateInfoInTeamOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 在群里面的昵称 */
  nickInTeam?: T['nickInTeam'];
  /** 是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定 */
  muteTeam: T['muteTeam'];
  /** 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串 */
  custom?: T['custom'];
}


/**
 * [🔗 更新本地消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateLocalMsg__anchor)
 * - [[NIM.updateLocalMsg|`NIM.updateLocalMsg`]]
 */
export interface NIMUpdateLocalMsgOpts<T extends NIMMessage = NIMMessage> extends NIMAsyncFuncOptions<{}, { msg?: T }> {
  idClient: T['idClient'];
  localCustom?: T['localCustom'];
}


/**
 * [🔗 更新本地会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateLocalSession__anchor)
 * - [[NIM.updateLocalSession|`NIM.updateLocalSession`]]
 */
export interface NIMUpdateLocalSessionOpts<T extends NIMSession = NIMSession> extends NIMAsyncFuncOptions<{}, { session?: T }> {
  id: T['id'];
  localCustom?: T['localCustom'];
}

/**
 * [🔗 更新本地系统通知](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateLocalSysMsg__anchor)
 * - [[NIM.updateLocalSysMsg|`NIM.updateLocalSysMsg`]]
 */
export interface NIMUpdateLocalSysMsgOpts<T extends NIMSystemMessage = NIMSystemMessage> extends NIMAsyncFuncOptions<{}, { sysMsg?: T }> {
  idServer: NIMSystemMessage['idServer'];
  /**
   * 状态
   * - TODO: 不清楚是`state`还是`status`，还有文档上面的`'bingo'`是代表什么
   */
  status?: T['state'];
  localCustom?: T['localCustom'];
}


/**
 * [🔗 更新群成员禁言状态](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateMuteStateInTeam__anchor)
 * - [[NIM.updateMuteStateInTeam|`NIM.updateMuteStateInTeam`]]
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMUpdateMuteStateInTeamOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  /** 群成员的帐号 */
  account: T['account'];
  /** 是否要禁言 */
  mute: T['mute'];
}



/**
 * [🔗更新我的名片](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateMyInfo__anchor)
 * - [[NIM.updateMyInfo|`NIM.updateMyInfo`]]
 */
export interface NIMUpdateMyInfoOpts<T extends NIMUser = NIMUser> extends NIMAsyncFuncOptions<Partial<Pick<T, Exclude<keyof NIMUser, 'account' | 'createTime' | 'updateTime'>>>, T> {

}


/**
 * [🔗 修改别人的群昵称](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateNickInTeam__anchor)
 * - [[NIM.updateNickInTeam|`NIM.updateNickInTeam`]]
 */
export interface NIMUpdateNickInTeamOpts<T extends NIMTeamMember = NIMTeamMember> extends NIMAsyncFuncOptions<{}> {
  teamId: T['teamId'];
  account: T['account'];
  nickInTeam: T['nickInTeam'];
}

/**
 * [🔗更新超级群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateSuperTeam__anchor)
 * - [[NIM.updateSuperTeam|`NIM.updateSuperTeam`]]
 */
export interface NIMUpdateSuperTeamOpts<T extends NIMSuperTeam = NIMSuperTeam> extends NIMAsyncFuncOptions<Partial<Pick<T, 'name' | 'avatar' | 'intro' | 'announcement' | 'custom'>>, T> {
  teamId: T['teamId'];
}


/**
 * [🔗 更新群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateTeam__anchor)
 * - [[NIM.updateTeam|`NIM.updateTeam`]]
 */
export interface NIMUpdateTeamOpts<T extends NIMTeam = NIMTeam> extends NIMAsyncFuncOptions<Partial<Pick<T, 'name' | 'avatar' | 'intro' | 'announcement' | 'joinMode' | 'beInviteMode' | 'inviteMode' | 'updateTeamMode' | 'updateCustomMode' | 'custom'>>, T> {
  teamId: T['teamId'];
}

/**
 * [🔗 预览去除图片元信息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#viewImageStripMeta__anchor)
 * - [[NIM.viewImageStripMeta|`NIM.viewImageStripMeta`]]
 */
export interface NIMViewImageStripMetaOpts extends NIMStripImageMetaOpts {

}


/**
 * [🔗 发布事件](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#publishEvent__anchor)
 * - [[NIM.publishEvent|`NIM.publishEvent`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMPublishEventOpts extends NIMAsyncFuncOptions<{}> {
  type: number;
  value: number;
  custom?: string;
  vaildTime: number;
  sync: boolean;
}

/**
 * [🔗 按账号获取指定事件的订阅关系](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#querySubscribeEventsByAccounts__anchor)
 * - [[NIM.querySubscribeEventsByAccounts|`NIM.querySubscribeEventsByAccounts`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMQuerySubscribeEventsByAccountsOpts extends NIMAsyncFuncOptions<{}> {
  type: NIMPublishEventOpts['type'];
  accounts: string[];
}


/**
 * [🔗 查询指定事件的全部订阅关系](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#querySubscribeEventsByType__anchor)
 * - [[NIM.querySubscribeEventsByType|`NIM.querySubscribeEventsByType`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMQuerySubscribeEventsByTypeOpts extends NIMAsyncFuncOptions<{}> {
  type: NIMPublishEventOpts['type'];
}

/**
 * [🔗 订阅事件](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#subscribeEvent__anchor)
 * - [[NIM.subscribeEvent|`NIM.subscribeEvent`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMSubscribeEventOpts extends NIMAsyncFuncOptions<{}> {
  type: NIMPublishEventOpts['type'];
  accounts: string[];
  subscribeTime: number;
  sync: boolean;
}

/**
 * [🔗 按账号取消指定事件的订阅关系](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#unSubscribeEventsByAccounts__anchor)
 * - [[NIM.unSubscribeEventsByAccounts|`NIM.unSubscribeEventsByAccounts`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMUnSubscribeEventsByAccountsOpts extends NIMAsyncFuncOptions<{}> {
  type: NIMPublishEventOpts['type'];
  accounts: string[];
}

/**
 * [🔗 取消指定事件的全部订阅关系](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#unSubscribeEventsByType__anchor)
 * - [[NIM.unSubscribeEventsByType|`NIM.unSubscribeEventsByType`]]
 * - TODO: 未知用途
 * - TODO: 文档模糊，未知实际返回结构
 */
export interface NIMUnSubscribeEventsByTypeOpts extends NIMAsyncFuncOptions<{}> {
  type: NIMPublishEventOpts['type'];
}


/**
 * [🔗 获取反垃圾词库(收费API)](https://dev.yunxin.163.com/docs/product/IM即时通讯/SDK开发集成/Web开发集成/客户端反垃圾)
 * - [[NIM.getClientAntispamLexicon]]
 */
export interface NIMGetClientAntispamLexiconOpts extends NIMAsyncFuncOptions<{}> {

}



/**
 * [🔗 获取服务器上的会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getServerSession__anchor)
 * - [[NIM.getServerSession]]
 */
export interface NIMGetServerSessionOpts<T extends NIMServerSession = NIMServerSession> extends NIMAsyncFuncOptions<{}, NIMServerSession> {
  /** 会话场景 */
  scene: NIMSceneType;
  /** 对方账号或群ID */
  to: string;
}


/**
 * [🔗 获取服务器会话列表](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#getServerSessions__anchor)
 * - [[NIM.getServerSessions]]
 * - 与漫游消息构成的会话列表不同，该列表记录的会话数量更多，超过了漫游列表100条的限制，但列表中的会话没有未读数
 */
export interface NIMGetServerSessionsOpts<T extends NIMServerSession = NIMServerSession> extends NIMAsyncFuncOptions<{}, { sessions: T[] }> {
  /**
   * 最小的时间戳。0表示之前从未请求过。如果之前拉取过会话，可以填写上次的时间戳，拉取自上次之后更新的会话
   * @default 0
   */
  minTimestamp?: number;
  /**
   * 最大的时间戳。默认是当前时间，表示拉取最新的会话。拉取第一页之后的会话时，填写上一页最后一条会话的更新时间
   */
  maxTimestamp?: number;
  /**
   * 是否需要lastMsg
   * @default true
   */
  needLastMsg?: boolean;
  /**
   * 返回的最大条数，最大100，剩余的可分页获取
   * @default 100
   */
  limit?: number;
}


/**
 * [🔗 更新服务器上某个会话的扩展字段](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateServerSession__anchor)
 * - [[NIM.updateServerSession]]
 */
export interface NIMUpdateServerSessionOpts extends NIMAsyncFuncOptions<{}> {
  /** 会话场景 */
  scene: NIMSceneType;
  /** 对方账号或群ID */
  to: string;
  /** 要更新的扩展字段 */
  extra: string;
}


/**
 * [🔗 删除服务器上会话列表中的一些会话](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteServerSessions__anchor)
 * - [[NIM.deleteServerSessions]]
 * - 删除后不可恢复，其他端也不能再拉取到，直至会话重新被产生
 * - 删除漫游消息产生的会话请使用删除会话或批量删除会话
 */
export interface NIMDeleteServerSessionsOpts extends NIMAsyncFuncOptions<{}> {
  /** 会话场景 */
  scene: NIMSceneType;
  /** 对方账号或群ID */
  to: string;
}


/**
 * [🔗 申请加入超大群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#applySuperTeam__anchor)
 * - [[NIM.applySuperTeam]]
 */
export interface NIMApplySuperTeamOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
  /** 附言, 选填, 长度不能大于5000, 开发者也可以使用JSON格式的字符串来扩展此内容 */
  ps?: string;
}

/**
 * [🔗 移除超大群管理员](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#removeSuperTeamManagers__anchor)
 * - [[NIM.removeSuperTeamManagers]]
 */
export interface NIMRemoveSuperTeamManagersOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
  /** 要移除的管理员帐号列表 */
  accounts: string[];
}

/**
 * [🔗 更新超大群成员禁言状态](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateSuperTeamMembersMute__anchor)
 * - [[NIM.updateSuperTeamMembersMute]]
 */
export interface NIMUpdateSuperTeamMembersMuteOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
  /** 要修改禁言的群成员帐号列表，每次最多修改十个 */
  accounts: string[];
  /** 是否要禁言 */
  mute: boolean;

}

/**
 * [🔗 超大群禁言](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateSuperTeamMute__anchor)
 * - [[NIM.updateSuperTeamMute]]
 */
export interface NIMUpdateSuperTeamMuteOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
}

/**
 * [🔗 修改超大群别人的昵称](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#updateNickInSuperTeam__anchor)
 * - [[NIM.updateNickInSuperTeam]]
 */
export interface NIMUpdateNickInSuperTeamOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
  /** 要修改昵称的超大群群成员的帐号 */
  account: string;
  /** 群昵称 */
  nickInTeam: string;
}

/**
 * [🔗 转让超大群](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#transferSuperTeam__anchor)
 * - [[NIM.transferSuperTeam]]
 */
export interface NIMTransferSuperTeamOpts extends NIMAsyncFuncOptions<{}> {
  /** 群id */
  teamId: string;
  /** 新群主的帐号 */
  account: string;
  /** 转让群的同时是否离开群 */
  leave: boolean;
}


/**
 * [🔗 搜索本地内容](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#searchLocal__anchor)
 * - [[NIM.searchLocal]]
 * - 搜索本地内容，支持搜索本地会话和本地联系人
 */
export interface NIMSearchLocalOpts extends NIMAsyncFuncOptions<{}, { sessions: NIMSession[]; users: NIMUser[]; msg?: string }> {
  /** 待搜索的关键词 */
  keyword: string;
  /** 定点搜索时使用 */
  keyPath?: LiteralUnion<
    'user.account' | 'user.nick' | 'user.alias' | 'session.id' | 'session.scene' | 'session.lastMsg.type' | 'session.lastMsg.text' | 'session.localCustom' | 'session.target.account' | 'session.target.nick' | 'session.target.alias' | 'session.target.name',
    never
  >;
}


/**
 * [🔗 将消息存储至本地数据库](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#saveMsgsToLocal__anchor)
 * - [[NIM.saveMsgsToLocal]]
 */
export interface NIMSaveMsgsToLocalOpts extends NIMAsyncFuncOptions<{}> {
  /** 要保存的消息 */
  msgs: NIMMessage[];
}



/**
 * [🔗 单向删除消息](https://dev.yunxin.163.com/docs/interface/即时通讯Web端/NIMSDK-Web/NIM.html#deleteMsgSelf__anchor)
 * - [[NIM.deleteMsgSelf]]
 * - 7.4.0 新增
 */
export interface NIMDeleteMsgSelfOpts extends NIMAsyncFuncOptions<{}> {
  /** 待删除的消息 */
  msg: NIMMessage;
  /** 扩展字段 */
  custom?: object;
}
