import got from 'got' interface MattermostInput { serverUrl: string accessToken: string } interface MattermostGetUser extends MattermostInput { userId: string } interface MattermostUser { id: string create_at: number update_at: number delete_at: number username: string email: string email_verified: boolean nickname: string first_name: string last_name: string roles: string } export const getUser = ({ serverUrl, accessToken, userId, }: MattermostGetUser) => got.get(`${serverUrl}/api/v4/users/${userId}`, { responseType: 'json', headers: { Authorization: `Bearer ${accessToken}` }, }) interface MattermostGetUserChannels extends MattermostInput { userId: string } interface MattermostChannel { id: string create_at: number update_at: number delete_at: number team_id: string type: string display_name: string name: string header: string purpose: string last_post_at: number total_msg_count: number extra_update_at: number creator_id: string total_msg_count_root: number last_root_post_at: number } export const getUserChannels = ({ serverUrl, accessToken, userId, }: MattermostGetUserChannels) => got.get(`${serverUrl}/api/v4/users/${userId}/channels`, { responseType: 'json', headers: { Authorization: `Bearer ${accessToken}` }, }) interface MattermostGetChannelMembers extends MattermostInput { channelId: string } interface MattermostChannelMember { channel_id: string user_id: string roles: string last_viewed_at: number msg_count: number mention_count: number mention_count_root: number msg_count_root: number notify_props: unknown last_update_at: number scheme_guest: false scheme_user: boolean scheme_admin: boolean explicit_roles: string } export const getChannelMembers = ({ serverUrl, accessToken, channelId, }: MattermostGetChannelMembers) => got.get( `${serverUrl}/api/v4/channels/${channelId}/members`, { responseType: 'json', headers: { Authorization: `Bearer ${accessToken}` }, } ) interface MattermostPost { id: string create_at: number update_at: number delete_at: number is_pinned: false user_id: string channel_id: string root_id: string original_id: string message: string type: string props: unknown hashtags: string pending_post_id: string reply_count: number last_reply_at: number metadata: unknown } /* get posts from a channel interface MattermostGetChannelPosts extends MattermostInput { channelId: string } interface MattermostChannelPost { order: string[] posts: { [id: string]: MattermostPost } next_post_id: string prev_post_id: string } export const getChannelPosts = ({ serverUrl, accessToken, channelId, }: MattermostGetChannelPosts) => got.get( `${serverUrl}/api/v4/channels/${channelId}/posts`, { responseType: 'json', headers: { Authorization: `Bearer ${accessToken}` }, } ) */ export interface MattermostSendMessage extends MattermostInput { channelId: string message: string props?: { from_webhook?: 'true' override_icon_url?: string override_username?: string } rootId?: string } export const sendMessage = ({ serverUrl, accessToken, channelId, message, props, rootId, }: MattermostSendMessage) => got.post(`${serverUrl}/api/v4/posts`, { json: { channel_id: channelId, message, props, root_id: rootId, }, responseType: 'json', headers: { Authorization: `Bearer ${accessToken}` }, })