lemmy-js-client/src/websocket.ts

684 lines
14 KiB
TypeScript
Raw Permalink Normal View History

import { ClassConstructor, deserialize, serialize } from "class-transformer";
2020-12-20 17:38:55 +00:00
import {
CreateComment,
CreateCommentLike,
CreateCommentReport,
2020-12-20 17:38:55 +00:00
DeleteComment,
EditComment,
GetComments,
ListCommentReports,
2020-12-20 17:38:55 +00:00
MarkCommentAsRead,
RemoveComment,
ResolveCommentReport,
2020-12-20 17:38:55 +00:00
SaveComment,
} from "./interfaces/api/comment";
2020-12-20 17:38:55 +00:00
import {
AddModToCommunity,
BanFromCommunity,
BlockCommunity,
2020-12-20 17:38:55 +00:00
CreateCommunity,
DeleteCommunity,
EditCommunity,
FollowCommunity,
GetCommunity,
ListCommunities,
RemoveCommunity,
TransferCommunity,
} from "./interfaces/api/community";
import {
AddAdmin,
BanPerson,
BlockPerson,
ChangePassword,
CreatePrivateMessage,
DeleteAccount,
DeletePrivateMessage,
EditPrivateMessage,
2022-01-06 16:19:36 +00:00
GetBannedPersons,
GetPersonDetails,
GetPersonMentions,
GetPrivateMessages,
GetReplies,
GetReportCount,
GetUnreadCount,
Login,
MarkAllAsRead,
MarkPersonMentionAsRead,
MarkPrivateMessageAsRead,
PasswordChange,
PasswordReset,
Register,
SaveUserSettings,
VerifyEmail,
} from "./interfaces/api/person";
2020-12-20 17:38:55 +00:00
import {
CreatePost,
CreatePostLike,
CreatePostReport,
2020-12-20 17:38:55 +00:00
DeletePost,
EditPost,
GetPost,
GetPosts,
GetSiteMetadata,
ListPostReports,
2020-12-20 17:38:55 +00:00
LockPost,
MarkPostAsRead,
2020-12-20 17:38:55 +00:00
RemovePost,
ResolvePostReport,
2020-12-20 17:38:55 +00:00
SavePost,
StickyPost,
} from "./interfaces/api/post";
2020-12-20 17:38:55 +00:00
import {
ApproveRegistrationApplication,
2020-12-20 17:38:55 +00:00
CreateSite,
EditSite,
GetModlog,
GetSite,
GetSiteConfig,
GetUnreadRegistrationApplicationCount,
LeaveAdmin,
ListRegistrationApplications,
ResolveObject,
2020-12-20 17:38:55 +00:00
SaveSiteConfig,
Search,
} from "./interfaces/api/site";
import { CommunityJoin, PostJoin, UserJoin } from "./interfaces/api/websocket";
import { UserOperation } from "./interfaces/others";
2020-12-20 17:38:55 +00:00
2021-01-24 17:37:04 +00:00
/**
* Helps build lemmy websocket message requests, that you can use in your Websocket sends.
*
2021-08-23 15:18:08 +00:00
* You'll receive back a [[WebSocketResponse]].
*
* The return types for these are given in [[LemmyHttp]]
2021-01-24 17:37:04 +00:00
*/
2020-12-20 17:38:55 +00:00
export class LemmyWebsocket {
constructor() {}
/**
* Log into lemmy.
*/
2020-12-20 17:38:55 +00:00
login(form: Login): string {
return wrapper(UserOperation.Login, form);
}
/**
* A websocket join for your user.
*
* Allows your user to receive private messages and notifications.
*/
2020-12-20 17:38:55 +00:00
userJoin(form: UserJoin): string {
return wrapper(UserOperation.UserJoin, form);
}
/**
* A websocket join for the current post room.
*
* Allows your user to receive new comments and updates for that post.
*/
2020-12-20 17:38:55 +00:00
postJoin(form: PostJoin): string {
return wrapper(UserOperation.PostJoin, form);
}
/**
* A websocket join for a given community.
*
* Allows your user to receive community updates.
*
* Note: community_id: 0, is your front page.
*/
2020-12-20 17:38:55 +00:00
communityJoin(form: CommunityJoin): string {
return wrapper(UserOperation.CommunityJoin, form);
}
/**
* Register a new user.
*/
2020-12-20 17:38:55 +00:00
register(register: Register) {
return wrapper(UserOperation.Register, register);
}
/**
* Fetch a Captcha.
*/
2020-12-20 17:38:55 +00:00
getCaptcha() {
return wrapper(UserOperation.GetCaptcha, {});
}
/**
* Create a new community.
*/
2020-12-20 17:38:55 +00:00
createCommunity(form: CreateCommunity) {
return wrapper(UserOperation.CreateCommunity, form);
}
/**
* Edit a community.
*/
2020-12-20 17:38:55 +00:00
editCommunity(form: EditCommunity) {
return wrapper(UserOperation.EditCommunity, form);
}
/**
* Delete a community.
*/
2020-12-20 17:38:55 +00:00
deleteCommunity(form: DeleteCommunity) {
return wrapper(UserOperation.DeleteCommunity, form);
}
/**
* A moderator remove for a community.
*/
2020-12-20 17:38:55 +00:00
removeCommunity(form: RemoveCommunity) {
return wrapper(UserOperation.RemoveCommunity, form);
}
/**
* Follow / subscribe to a community.
*/
2020-12-20 17:38:55 +00:00
followCommunity(form: FollowCommunity) {
return wrapper(UserOperation.FollowCommunity, form);
}
/**
* List communities, with various filters.
*/
2020-12-20 17:38:55 +00:00
listCommunities(form: ListCommunities) {
return wrapper(UserOperation.ListCommunities, form);
}
/**
* Create a post.
*/
2020-12-20 17:38:55 +00:00
createPost(form: CreatePost) {
return wrapper(UserOperation.CreatePost, form);
}
/**
* Get / fetch a post.
*/
2020-12-20 17:38:55 +00:00
getPost(form: GetPost) {
return wrapper(UserOperation.GetPost, form);
}
/**
* Get / fetch a community.
*/
2020-12-20 17:38:55 +00:00
getCommunity(form: GetCommunity) {
return wrapper(UserOperation.GetCommunity, form);
}
/**
* Create a comment.
*/
2020-12-20 17:38:55 +00:00
createComment(form: CreateComment) {
return wrapper(UserOperation.CreateComment, form);
}
/**
* Edit a comment.
*/
2020-12-20 17:38:55 +00:00
editComment(form: EditComment) {
return wrapper(UserOperation.EditComment, form);
}
/**
* Delete a comment.
*/
2020-12-20 17:38:55 +00:00
deleteComment(form: DeleteComment) {
return wrapper(UserOperation.DeleteComment, form);
}
/**
* A moderator remove for a comment.
*/
2020-12-20 17:38:55 +00:00
removeComment(form: RemoveComment) {
return wrapper(UserOperation.RemoveComment, form);
}
/**
* Mark a comment as read.
*/
2020-12-20 17:38:55 +00:00
markCommentAsRead(form: MarkCommentAsRead) {
return wrapper(UserOperation.MarkCommentAsRead, form);
}
/**
* Like / vote on a comment.
*/
2020-12-20 17:38:55 +00:00
likeComment(form: CreateCommentLike) {
return wrapper(UserOperation.CreateCommentLike, form);
}
/**
* Save a comment.
*/
2020-12-20 17:38:55 +00:00
saveComment(form: SaveComment) {
return wrapper(UserOperation.SaveComment, form);
}
/**
* Report a comment.
*/
createCommentReport(form: CreateCommentReport) {
return wrapper(UserOperation.CreateCommentReport, form);
}
/**
* Resolve a comment report. Only a mod can do this.
*/
resolveCommentReport(form: ResolveCommentReport) {
return wrapper(UserOperation.ResolveCommentReport, form);
}
/**
* List comment reports.
*/
listCommentReports(form: ListCommentReports) {
return wrapper(UserOperation.ListCommentReports, form);
}
/**
* Get / fetch posts, with various filters.
*/
2020-12-20 17:38:55 +00:00
getPosts(form: GetPosts) {
return wrapper(UserOperation.GetPosts, form);
}
/**
* Get / fetch comments.
*/
2020-12-20 17:38:55 +00:00
getComments(form: GetComments) {
return wrapper(UserOperation.GetComments, form);
}
/**
* Like / vote on a post.
*/
2020-12-20 17:38:55 +00:00
likePost(form: CreatePostLike) {
return wrapper(UserOperation.CreatePostLike, form);
}
/**
* Edit a post.
*/
2020-12-20 17:38:55 +00:00
editPost(form: EditPost) {
return wrapper(UserOperation.EditPost, form);
}
/**
* Delete a post.
*/
2020-12-20 17:38:55 +00:00
deletePost(form: DeletePost) {
return wrapper(UserOperation.DeletePost, form);
}
/**
* A moderator remove for a post.
*/
2020-12-20 17:38:55 +00:00
removePost(form: RemovePost) {
return wrapper(UserOperation.RemovePost, form);
}
/**
* A moderator can lock a post ( IE disable new comments ).
*/
2020-12-20 17:38:55 +00:00
lockPost(form: LockPost) {
return wrapper(UserOperation.LockPost, form);
}
/**
* A moderator can sticky a post ( IE stick it to the top of a community ).
*/
2020-12-20 17:38:55 +00:00
stickyPost(form: StickyPost) {
return wrapper(UserOperation.StickyPost, form);
}
/**
* Mark a post as read.
*/
markPostAsRead(form: MarkPostAsRead) {
return wrapper(UserOperation.MarkPostAsRead, form);
}
/**
* Save a post.
*/
2020-12-20 17:38:55 +00:00
savePost(form: SavePost) {
return wrapper(UserOperation.SavePost, form);
}
/**
* Report a post.
*/
createPostReport(form: CreatePostReport) {
return wrapper(UserOperation.CreatePostReport, form);
}
/**
* Resolve a post report. Only a mod can do this.
*/
resolvePostReport(form: ResolvePostReport) {
return wrapper(UserOperation.ResolvePostReport, form);
}
/**
* List post reports.
*/
listPostReports(form: ListPostReports) {
return wrapper(UserOperation.ListPostReports, form);
}
/**
* Fetch metadata for any given site.
*/
getSiteMetadata(form: GetSiteMetadata) {
return wrapper(UserOperation.GetSiteMetadata, form);
}
/**
* Ban a user from a community.
*/
2020-12-20 17:38:55 +00:00
banFromCommunity(form: BanFromCommunity) {
return wrapper(UserOperation.BanFromCommunity, form);
}
/**
* Add a moderator to your community.
*/
2020-12-20 17:38:55 +00:00
addModToCommunity(form: AddModToCommunity) {
return wrapper(UserOperation.AddModToCommunity, form);
}
/**
* Transfer your community to an existing moderator.
*/
2020-12-20 17:38:55 +00:00
transferCommunity(form: TransferCommunity) {
return wrapper(UserOperation.TransferCommunity, form);
}
/**
* Leave the Site admins.
*/
leaveAdmin(form: LeaveAdmin) {
return wrapper(UserOperation.LeaveAdmin, form);
2020-12-20 17:38:55 +00:00
}
/**
* Ban a person from your site.
*/
banPerson(form: BanPerson) {
return wrapper(UserOperation.BanPerson, form);
2020-12-20 17:38:55 +00:00
}
2022-01-06 16:19:36 +00:00
/**
* Get a list of banned users
*/
getBannedPersons(form: GetBannedPersons) {
return wrapper(UserOperation.GetBannedPersons, form);
}
/**
* Add an admin to your site.
*/
2020-12-20 17:38:55 +00:00
addAdmin(form: AddAdmin) {
return wrapper(UserOperation.AddAdmin, form);
}
/**
* Get the unread registration applications count.
*/
getUnreadRegistrationApplicationCount(
form: GetUnreadRegistrationApplicationCount
) {
return wrapper(UserOperation.GetUnreadRegistrationApplicationCount, form);
}
/**
* List the unread registration applications.
*/
listRegistrationApplications(form: ListRegistrationApplications) {
return wrapper(UserOperation.ListRegistrationApplications, form);
}
/**
* Approve a registration application
*/
approveRegistrationApplication(form: ApproveRegistrationApplication) {
return wrapper(UserOperation.ApproveRegistrationApplication, form);
}
/**
* Get the details for a person.
*/
getPersonDetails(form: GetPersonDetails) {
return wrapper(UserOperation.GetPersonDetails, form);
2020-12-20 17:38:55 +00:00
}
/**
* Get comment replies.
*/
2020-12-20 17:38:55 +00:00
getReplies(form: GetReplies) {
return wrapper(UserOperation.GetReplies, form);
}
/**
* Get mentions for your user.
*/
getPersonMentions(form: GetPersonMentions) {
return wrapper(UserOperation.GetPersonMentions, form);
2020-12-20 17:38:55 +00:00
}
/**
* Mark a person mention as read.
*/
markPersonMentionAsRead(form: MarkPersonMentionAsRead) {
return wrapper(UserOperation.MarkPersonMentionAsRead, form);
2020-12-20 17:38:55 +00:00
}
/**
* Get the modlog.
*/
2020-12-20 17:38:55 +00:00
getModlog(form: GetModlog) {
return wrapper(UserOperation.GetModlog, form);
}
/**
* Create your site.
*/
2020-12-20 17:38:55 +00:00
createSite(form: CreateSite) {
return wrapper(UserOperation.CreateSite, form);
}
/**
* Edit your site.
*/
2020-12-20 17:38:55 +00:00
editSite(form: EditSite) {
return wrapper(UserOperation.EditSite, form);
}
/**
* Gets the site, and your user data.
*/
getSite(form: GetSite) {
2020-12-20 17:38:55 +00:00
return wrapper(UserOperation.GetSite, form);
}
/**
* Get your site configuration.
*/
2020-12-20 17:38:55 +00:00
getSiteConfig(form: GetSiteConfig) {
return wrapper(UserOperation.GetSiteConfig, form);
}
/**
* Search lemmy.
*/
2020-12-20 17:38:55 +00:00
search(form: Search) {
return wrapper(UserOperation.Search, form);
}
/**
* Fetch a non-local / federated object.
*/
resolveObject(form: ResolveObject) {
return wrapper(UserOperation.ResolveObject, form);
}
/**
* Mark all replies as read.
*/
2020-12-20 17:38:55 +00:00
markAllAsRead(form: MarkAllAsRead) {
return wrapper(UserOperation.MarkAllAsRead, form);
}
/**
* Save your user settings.
*/
2020-12-20 17:38:55 +00:00
saveUserSettings(form: SaveUserSettings) {
return wrapper(UserOperation.SaveUserSettings, form);
}
/**
* Change your user password.
*/
2021-04-01 21:35:37 +00:00
changePassword(form: ChangePassword) {
return wrapper(UserOperation.ChangePassword, form);
}
/**
* Get counts for your reports
*/
getReportCount(form: GetReportCount) {
return wrapper(UserOperation.GetReportCount, form);
}
/**
* Get your unread counts
*/
getUnreadCount(form: GetUnreadCount) {
return wrapper(UserOperation.GetUnreadCount, form);
}
/**
* Verify your email
*/
verifyEmail(form: VerifyEmail) {
return wrapper(UserOperation.VerifyEmail, form);
}
/**
* Delete your account.
*/
2020-12-20 17:38:55 +00:00
deleteAccount(form: DeleteAccount) {
return wrapper(UserOperation.DeleteAccount, form);
}
/**
* Reset your password.
*/
2020-12-20 17:38:55 +00:00
passwordReset(form: PasswordReset) {
return wrapper(UserOperation.PasswordReset, form);
}
/**
* Change your password from an email / token based reset.
*/
2020-12-20 17:38:55 +00:00
passwordChange(form: PasswordChange) {
return wrapper(UserOperation.PasswordChange, form);
}
/**
* Create a private message.
*/
2020-12-20 17:38:55 +00:00
createPrivateMessage(form: CreatePrivateMessage) {
return wrapper(UserOperation.CreatePrivateMessage, form);
}
/**
* Edit a private message.
*/
2020-12-20 17:38:55 +00:00
editPrivateMessage(form: EditPrivateMessage) {
return wrapper(UserOperation.EditPrivateMessage, form);
}
/**
* Delete a private message.
*/
2020-12-20 17:38:55 +00:00
deletePrivateMessage(form: DeletePrivateMessage) {
return wrapper(UserOperation.DeletePrivateMessage, form);
}
/**
* Mark a private message as read.
*/
2020-12-20 17:38:55 +00:00
markPrivateMessageAsRead(form: MarkPrivateMessageAsRead) {
return wrapper(UserOperation.MarkPrivateMessageAsRead, form);
}
/**
* Get / fetch private messages.
*/
2020-12-20 17:38:55 +00:00
getPrivateMessages(form: GetPrivateMessages) {
return wrapper(UserOperation.GetPrivateMessages, form);
}
/**
* Save your site config.
*/
2020-12-20 17:38:55 +00:00
saveSiteConfig(form: SaveSiteConfig) {
return wrapper(UserOperation.SaveSiteConfig, form);
}
/**
* Block a person.
*/
blockPerson(form: BlockPerson) {
return wrapper(UserOperation.BlockPerson, form);
}
/**
* Block a community.
*/
blockCommunity(form: BlockCommunity) {
return wrapper(UserOperation.BlockCommunity, form);
}
2020-12-20 17:38:55 +00:00
}
function wrapper<MessageType>(op: UserOperation, data: MessageType) {
let send = { op: UserOperation[op], data: serialize(data) };
2020-12-20 17:38:55 +00:00
console.log(send);
return JSON.stringify(send);
}
/**
* A websocket JSON response that includes the errors.
*/
// interface WebSocketJsonResponse {
// op?: string;
// /**
// * This contains the data for a websocket response.
// *
// * The correct response type if given is in [[LemmyHttp]].
// */
// data?: ResponseType;
// error?: string;
// reconnect?: boolean;
// }
export function wsUserOp(msg: any): UserOperation {
let opStr: string = msg.op;
return UserOperation[opStr as keyof typeof UserOperation];
}
/**
* Converts a websocket string response to a usable result
*/
export function wsJsonToRes<ResponseType>(
msg: any,
responseClass: ClassConstructor<ResponseType>
): ResponseType {
return deserialize(responseClass, msg.data);
}