import { v4 as uuidV4 } from 'uuid'; import OpenIMSDK from '..'; import { BaseResponse } from '@/types/entity'; import { AccessFriendApplicationParams, AddBlackParams, AddFriendParams, RemarkFriendParams, SearchFriendParams, SetFriendExParams, } from 'open-im-sdk-wasm/lib/types/params'; import { FriendshipInfo, BlackUserItem, FriendApplicationItem, FullUserItem, SearchedFriendsInfo, } from 'open-im-sdk-wasm/lib/types/entity'; export function setupFriendModule(openIMSDK: OpenIMSDK) { return { acceptFriendApplication: ( params: AccessFriendApplicationParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.accept_friend_application( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), addBlack: (params: AddBlackParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.add_black( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.toUserID, params.ex ?? '' ); }), addFriend: (params: AddFriendParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.add_friend( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), checkFriend: (userIDList: string[], opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.check_friend( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(userIDList) ); }), deleteFriend: (userID: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.delete_friend( openIMSDK.baseCallbackWrap(resolve, reject), opid, userID ); }), setFriendsEx: (params: SetFriendExParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_friends_ex( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params), params.ex ?? '' ); }), getBlackList: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_black_list( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), getFriendApplicationListAsApplicant: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_friend_application_list_as_applicant( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), getFriendApplicationListAsRecipient: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_friend_application_list_as_recipient( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), getFriendList: (opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_friend_list( openIMSDK.baseCallbackWrap(resolve, reject), opid ); }), getSpecifiedFriendsInfo: (userIDList: string[], opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_specified_friends_info( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(userIDList) ); }), refuseFriendApplication: ( params: AccessFriendApplicationParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.refuse_friend_application( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), removeBlack: (userID: string, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.remove_black( openIMSDK.baseCallbackWrap(resolve, reject), opid, userID ); }), searchFriends: (params: SearchFriendParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.search_friends( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), setFriendRemark: (params: RemarkFriendParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.set_friend_remark( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), }; } export interface FriendModuleApi { acceptFriendApplication: ( params: AccessFriendApplicationParams, opid?: string ) => Promise>; addBlack: (userID: string, opid?: string) => Promise>; addFriend: (userID: string, opid?: string) => Promise>; checkFriend: ( userIDList: string[], opid?: string ) => Promise>; deleteFriend: (userID: string, opid?: string) => Promise>; setFriendsEx: ( params: SetFriendExParams, opid?: string ) => Promise>; getBlackList: (opid?: string) => Promise>; getFriendApplicationListAsApplicant: ( opid?: string ) => Promise>; getFriendApplicationListAsRecipient: ( opid?: string ) => Promise>; getFriendList: (opid?: string) => Promise>; getSpecifiedFriendsInfo: ( userIDList: string[], opid?: string ) => Promise>; refuseFriendApplication: ( params: AccessFriendApplicationParams, opid?: string ) => Promise>; removeBlack: (userID: string, opid?: string) => Promise>; searchFriends: ( params: SearchFriendParams, opid?: string ) => Promise>; setFriendRemark: ( params: RemarkFriendParams, opid?: string ) => Promise>; }