import { v4 as uuidV4 } from 'uuid'; import OpenIMSDK from '..'; import { BaseResponse } from '@/types/entity'; import { AccessFriendApplicationParams, AddBlackParams, AddFriendParams, GetSpecifiedFriendsParams, OffsetParams, PinFriendParams, RemarkFriendParams, SearchFriendParams, SetFriendExParams, UpdateFriendsParams, } from '@openim/wasm-client-sdk/lib/types/params'; import { FriendshipInfo, BlackUserItem, FriendApplicationItem, SearchedFriendsInfo, FriendUserItem, } from '@openim/wasm-client-sdk/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.update_friends( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify({ friendUserIDs: params.toUserIDs, ex: 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: (filterBlack?: boolean, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_friend_list( openIMSDK.baseCallbackWrap(resolve, reject), opid, filterBlack ? 1 : 0 ); }), getFriendListPage: ( params: OffsetParams & { filterBlack?: boolean }, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_friend_list_page( openIMSDK.baseCallbackWrap(resolve, reject), opid, params.offset, params.count, params.filterBlack ? 1 : 0 ); }), updateFriends: (params: UpdateFriendsParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.update_friends( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params) ); }), getSpecifiedFriendsInfo: ( params: GetSpecifiedFriendsParams, opid = uuidV4() ) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.get_specified_friends_info( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify(params.friendUserIDList), params.filterBlack ? 1 : 0 ); }), 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.update_friends( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify({ friendUserIDs: [params.toUserID], remark: params.remark, }) ); }), pinFriends: (params: PinFriendParams, opid = uuidV4()) => new Promise>((resolve, reject) => { openIMSDK.libOpenIMSDK.update_friends( openIMSDK.baseCallbackWrap(resolve, reject), opid, JSON.stringify({ friendUserIDs: params.toUserIDs, isPinned: params.isPinned, }) ); }), }; } 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: ( filterBlack?: boolean, opid?: string ) => Promise>; getFriendListPage: ( params: OffsetParams & { filterBlack?: boolean }, opid?: string ) => Promise>; updateFriends: ( params: UpdateFriendsParams, opid?: string ) => Promise>; getSpecifiedFriendsInfo: ( params: GetSpecifiedFriendsParams, 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>; }