import type { AccessFriendParams, AddBlackParams, RemarkFriendParams, SearchFriendParams, } from '@/types/params'; import OpenIMSDK from '.'; import { RequestApi } from '@/constant/api'; import type { BlackUserItem, FriendApplicationItem, FriendshipInfo, WsResponse, SearchedFriendsInfo, FullUserItem, } from '@/types/entity'; export function setupFriend(openIMSDK: OpenIMSDK) { return { acceptFriendApplication: openIMSDK.createRequestFunction( RequestApi.AcceptFriendApplication ), addBlack: openIMSDK.createRequestFunction( RequestApi.AddBlack, data => JSON.stringify([data.toUserID, data.ex ?? '']) ), addFriend: openIMSDK.createRequestFunction(RequestApi.AddFriend), checkFriend: openIMSDK.createRequestFunction( RequestApi.CheckFriend ), deleteFriend: openIMSDK.createRequestFunction( RequestApi.DeleteFriend ), getBlackList: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetBlackList ), getFriendApplicationListAsApplicant: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetFriendApplicationListAsApplicant ), getFriendApplicationListAsRecipient: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetFriendApplicationListAsRecipient ), getFriendList: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetFriendList ), getSpecifiedFriendsInfo: openIMSDK.createRequestFunction< string[], FullUserItem[] >(RequestApi.GetSpecifiedFriendsInfo), refuseFriendApplication: openIMSDK.createRequestFunction( RequestApi.RefuseFriendApplication ), removeBlack: openIMSDK.createRequestFunction( RequestApi.RemoveBlack ), searchFriends: openIMSDK.createRequestFunction< SearchFriendParams, SearchedFriendsInfo[] >(RequestApi.SearchFriends), setFriendRemark: openIMSDK.createRequestFunction( RequestApi.SetFriendRemark ), }; } export interface FriendApi { acceptFriendApplication: ( params: AccessFriendParams, operationID?: string ) => Promise>; addBlack: ( params: AddBlackParams, operationID?: string ) => Promise>; addFriend: ( params: string, operationID?: string ) => Promise>; checkFriend: ( params: string[], operationID?: string ) => Promise>; deleteFriend: ( params: string, operationID?: string ) => Promise>; getBlackList: (operationID?: string) => Promise>; getFriendApplicationListAsApplicant: ( operationID?: string ) => Promise>; getFriendApplicationListAsRecipient: ( operationID?: string ) => Promise>; getFriendList: (operationID?: string) => Promise>; getSpecifiedFriendsInfo: ( params: string[], operationID?: string ) => Promise>; refuseFriendApplication: ( params: AccessFriendParams, operationID?: string ) => Promise>; removeBlack: ( params: string, operationID?: string ) => Promise>; searchFriends: ( params: SearchFriendParams, operationID?: string ) => Promise>; setFriendRemark: ( params: RemarkFriendParams, operationID?: string ) => Promise>; }