5#include "ChannelFlags.h"
6#include "CoreMinimal.h"
7#include "Request/Channel/ChannelRequestDto.h"
8#include "Request/Channel/MessagePaginationParamsRequestDto.h"
9#include "Request/Channel/PaginationParamsRequestDto.h"
10#include "Request/Message/MessageRequestDto.h"
11#include "Request/SortParamRequestDto.h"
12#include "RequestBuilder.h"
13#include "StreamJson.h"
18enum class EPushProvider : uint8;
51using TCallback = TFunction<void(
const TResponse<T>&)>;
58class STREAMCHATAPI_API
FChatApi :
public TSharedFromThis<FChatApi>
61 static TSharedRef<FChatApi> Create(
const FString& InApiKey,
const FString& InHost,
const TSharedPtr<FTokenManager>&);
63#pragma region Moderation
83 const FString& TargetUserId,
84 const FString&
Type = {},
85 const FString&
Id = {},
86 const TOptional<FTimespan>& Timeout = {},
87 const TOptional<FString>& Reason = {},
90 TCallback<FResponseDto> Callback = {})
const;
99 void UnbanUser(
const FString& TargetUserId,
const FString&
Type = {},
const FString&
Id = {}, TCallback<FResponseDto> Callback = {})
const;
115 void QueryBannedUsers(
116 const TSharedRef<FJsonObject>& Filter,
117 const TArray<FSortParamRequestDto>& SortOptions = {},
118 const TOptional<FDateTime> CreatedAtAfterOrEqual = {},
119 const TOptional<FDateTime> CreatedAtAfter = {},
120 const TOptional<FDateTime> CreatedAtBeforeOrEqual = {},
121 const TOptional<FDateTime> CreatedAtBefore = {},
122 TOptional<uint32> Limit = {},
123 TOptional<uint32> Offset = {},
124 TCallback<FQueryBannedUsersResponseDto> Callback = {})
const;
132 void Flag(
const FString& TargetMessageId = {},
const FString& TargetUserId = {}, TCallback<FFlagResponseDto> Callback = {})
const;
140 void MuteUsers(
const TArray<FString>& TargetUserIds, TOptional<FTimespan> Timeout = {}, TCallback<FMuteUserResponseDto> Callback = {})
const;
147 void UnmuteUsers(
const TArray<FString>& TargetUserIds, TCallback<FResponseDto> Callback = {})
const;
155 void MuteChannels(
const TArray<FString>& TargetCids, TOptional<FTimespan> Timeout = {}, TCallback<FMuteChannelResponseDto> Callback = {})
const;
162 void UnmuteChannels(
const TArray<FString>& TargetCids, TCallback<FResponseDto> Callback = {})
const;
165#pragma endregion Moderation
167#pragma region Channels
187 const FString& ChannelType,
188 const FString& ConnectionId,
191 const TOptional<FString>& ChannelId = {},
192 const TOptional<FMessagePaginationParamsRequestDto> MessagePagination = {},
193 const TOptional<FPaginationParamsRequestDto> MemberPagination = {},
194 const TOptional<FPaginationParamsRequestDto> WatcherPagination = {},
195 TCallback<FChannelStateResponseDto> Callback = {})
const;
203 void DeleteChannel(
const FString& ChannelType,
const FString& ChannelId, TCallback<FDeleteChannelResponseDto> Callback = {})
const;
213 void PartialUpdateChannel(
214 const FString& ChannelType,
215 const FString& ChannelId,
216 const TSharedRef<FJsonObject>& Set,
217 const TArray<FString>& Unset,
218 TCallback<FUpdateChannelPartialResponseDto> Callback = {})
const;
228 const FString& ChannelType,
229 const FString& ChannelId,
231 TCallback<FUpdateChannelResponseDto> Callback = {})
const;
241 void HideChannel(
const FString& ChannelType,
const FString& ChannelId,
bool bClearHistory =
false, TCallback<FResponseDto> Callback = {})
const;
249 void ShowChannel(
const FString& ChannelType,
const FString& ChannelId, TCallback<FResponseDto> Callback = {})
const;
267 const FString& ConnectionId,
268 EChannelFlags Flags = EChannelFlags::State | EChannelFlags::Watch,
269 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
270 const TArray<FSortParamRequestDto>& SortOptions = {},
271 TOptional<uint32> MemberLimit = {},
272 TOptional<uint32> MessageLimit = {},
273 TOptional<uint32> Limit = {},
274 TOptional<uint32> Offset = {},
275 TCallback<FChannelsResponseDto> Callback = {})
const;
284 void StopWatchingChannel(
const FString& ChannelType,
const FString& ChannelId,
const FString& ConnectionId, TCallback<FResponseDto> Callback = {})
const;
302 const TSharedRef<FJsonObject>& ChannelFilter,
303 const TOptional<FString>&
Query = {},
304 const TOptional<TSharedRef<FJsonObject>>& MessageFilter = {},
305 const TArray<FSortParamRequestDto>& Sort = {},
306 TOptional<uint32> MessageLimit = {},
307 TOptional<uint32> Offset = {},
308 TOptional<FString> Next = {},
309 TCallback<FSearchResponseDto> Callback = {})
const;
315 void MarkChannelsRead(TCallback<FMarkReadResponseDto> Callback = {})
const;
324 void MarkChannelRead(
325 const FString& ChannelType,
326 const FString& ChannelId,
327 const TOptional<FString>& MessageId = {},
328 TCallback<FMarkReadResponseDto> Callback = {})
const;
343 const FString& ChannelType,
344 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
345 const TOptional<FString>& ChannelId = {},
346 const TOptional<TArray<FString>>& Members = {},
347 const TArray<FSortParamRequestDto>& SortOptions = {},
349 TCallback<FMembersResponseDto> Callback = {})
const;
361 void TruncateChannel(
362 const FString& ChannelType,
363 const FString& ChannelId,
364 bool bHardDelete =
false,
365 const TOptional<FDateTime>& TruncatedAt = {},
366 const TOptional<FMessageRequestDto>& Message = {},
367 bool bSkipPush =
false,
368 TCallback<FTruncateChannelResponseDto> Callback = {})
const;
371#pragma endregion Channels
373#pragma region Messages
384 void GetMessage(
const FString& MessageId, TCallback<FMessageResponseDto> Callback = {})
const;
395 const FString& ChannelType,
396 const FString& ChannelId,
398 bool bSkipPush =
false,
399 TCallback<FMessageResponseDto> Callback = {})
const;
406 void UpdateMessage(
const FMessageRequestDto& MessageRequest, TCallback<FMessageResponseDto> Callback = {})
const;
414 void DeleteMessage(
const FString&
Id,
bool bHard =
false, TCallback<FMessageResponseDto> Callback = {})
const;
427 const FString& MessageId,
429 bool bEnforceUnique =
true,
430 TOptional<uint32> Score = {},
431 bool bSkipPush =
false,
432 TCallback<FReactionResponseDto> Callback = {})
const;
440 void DeleteReaction(
const FString& MessageId,
const FName&
Type, TCallback<FReactionResponseDto> Callback = {})
const;
449 void GetReactions(
const FString& MessageId, TOptional<uint32> Limit, TOptional<uint32> Offset, TCallback<FGetReactionsResponseDto> Callback = {})
const;
452#pragma endregion Messages
467 template <
class TEvent>
468 void SendChannelEvent(
const FString& ChannelType,
const FString& ChannelId,
const TEvent&, TCallback<FEventResponseDto> Callback = {});
471#pragma endregion Events
480#pragma endregion Files
500 const FString& ConnectionId,
501 bool bPresence =
true,
502 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
503 const TArray<FSortParamRequestDto>& SortOptions = {},
504 TOptional<uint32> Limit = {},
505 TOptional<uint32> Offset = {},
506 TCallback<FUsersResponseDto> Callback = {})
const;
508 void CreateGuest(
const FUserObjectRequestDto& User, TCallback<FGuestResponseDto> Callback = {})
const;
510 struct FPartialUpdateUser
513 const TSharedRef<FJsonObject>& Set;
514 const TArray<FString>& Unset;
522 void PartialUpdateUsers(
const TArray<FPartialUpdateUser>& Users, TCallback<FUpdateUsersResponseDto> Callback = {})
const;
529 void UpsertUsers(
const TMap<FString, FUserObjectRequestDto>& Users, TCallback<FUpdateUsersResponseDto> Callback = {})
const;
532#pragma endregion Users
534#pragma region Devices
546 void AddDevice(
const FString& DeviceId, EPushProvider PushProvider, TCallback<FResponseDto> Callback = {})
const;
553 void RemoveDevice(
const FString& DeviceId, TCallback<FResponseDto> Callback = {})
const;
559 void ListDevices(TCallback<FListDevicesResponseDto> Callback = {})
const;
562#pragma endregion Devices
565 explicit FChatApi(
const FString& InApiKey,
const FString& InHost,
const TSharedPtr<FTokenManager>&);
566 void SendChannelEventInternal(
567 const FString& ChannelType,
568 const FString& ChannelId,
569 const TSharedRef<FJsonObject>& Event,
570 TCallback<FEventResponseDto> Callback = {})
const;
572 FString BuildUrl(
const FString& Path)
const;
574 void AddAuth(FRequestBuilder&,
const FToken& Token)
const;
575 void OnRequest(FRequestBuilder&)
const;
576 void OnError(
const FHttpResponse&, FRequestBuilder&)
const;
578 TSharedPtr<FTokenManager> TokenManager;
581 TSharedPtr<FHttpClient> Client;
586template <
class TEvent>
587void FChatApi::SendChannelEvent(
const FString& ChannelType,
const FString& ChannelId,
const TEvent& Event,
const TCallback<FEventResponseDto> Callback)
590 TIsSame<
decltype(TEvent::StaticType()),
decltype(TEvent::StaticType())>::Value,
591 "TEvent must have a static method 'StaticType' which returns a FName to use with SendChannelEvent.");
592 SendChannelEventInternal(ChannelType, ChannelId, JsonObject::UStructToJsonObject<TEvent>(Event), Callback);
All Stream Chat REST API requests can be made via this object.
Definition: ChatApi.h:59
void SendChannelEvent(const FString &ChannelType, const FString &ChannelId, const TEvent &, TCallback< FEventResponseDto > Callback={})
Send a custom or built-in event on this channel.
Definition: ChatApi.h:587
EChannelFlags
Additional channel actions to perform when requesting channel data from API.
Definition: ChannelFlags.h:15
@ UserId
The user ID of the user that sent the message.
@ Type
Type of the message.
@ Query
Matches values by performing text search with the specified value.
#/components/schemas/ChannelRequest
Definition: ChannelRequestDto.h:16
#/components/schemas/ChannelResponse Represents channel in chat
Definition: ChannelResponseDto.h:20
The desired sort options for Channel API queries.
Definition: ChannelSortOption.h:44
#/components/schemas/ChannelStateResponse
Definition: ChannelStateResponseDto.h:16
#/components/schemas/ChannelsResponse
Definition: ChannelsResponseDto.h:17
#/components/schemas/DeleteChannelResponse
Definition: DeleteChannelResponseDto.h:17
#/components/schemas/EventResponse
Definition: EventResponseDto.h:17
#/components/schemas/FlagResponse
Definition: FlagResponseDto.h:17
#/components/schemas/GetReactionsResponse
Definition: GetReactionsResponseDto.h:17
#/components/schemas/GuestResponse
Definition: GuestResponseDto.h:17
#/components/schemas/Response
Definition: ListDevicesResponseDto.h:17
#/components/schemas/MarkReadRequest
Definition: MarkReadRequestDto.h:18
#/components/schemas/MarkReadResponse
Definition: MarkReadResponseDto.h:17
#/components/schemas/MembersResponse
Definition: MembersResponseDto.h:17
#/components/schemas/MessageRequest
Definition: MessageRequestDto.h:17
#/components/schemas/MessageResponse
Definition: MessageResponseDto.h:17
#/components/schemas/MuteChannelResponse
Definition: MuteChannelResponseDto.h:18
#/components/schemas/MuteUserResponse
Definition: MuteUserResponseDto.h:18
#/components/schemas/QueryBannedUsersResponse
Definition: QueryBannedUsersResponseDto.h:17
#/components/schemas/ReactionRequest Represents user reaction to a message
Definition: ReactionRequestDto.h:16
#/components/schemas/ReactionResponse
Definition: ReactionResponseDto.h:18
#/components/schemas/Response
Definition: ResponseDto.h:15
#/components/schemas/SearchResponse
Definition: SearchResponseDto.h:18
#/components/schemas/TruncateChannelResponse
Definition: TruncateChannelResponseDto.h:18
#/components/schemas/UpdateChannelPartialResponse
Definition: UpdateChannelPartialResponseDto.h:17
#/components/schemas/UpdateChannelRequest
Definition: UpdateChannelRequestDto.h:19
#/components/schemas/UpdateChannelResponse
Definition: UpdateChannelResponseDto.h:18
#/components/schemas/UpdateUsersResponse
Definition: UpdateUsersResponseDto.h:17
#/components/schemas/UserObjectRequest
Definition: UserObjectRequestDto.h:16
#/components/schemas/UsersResponse
Definition: UsersResponseDto.h:17