// @flow import { COMMENT_SERVER_API } from 'config'; const Comments = { url: COMMENT_SERVER_API, enabled: Boolean(COMMENT_SERVER_API), isCustomServer: false, setServerUrl: (customUrl: ?string) => { Comments.url = customUrl === undefined ? COMMENT_SERVER_API : customUrl; Comments.enabled = Boolean(Comments.url); Comments.isCustomServer = Comments.url !== COMMENT_SERVER_API; }, moderation_block: (params: ModerationBlockParams) => fetchCommentsApi('moderation.Block', params), moderation_unblock: (params: ModerationBlockParams) => fetchCommentsApi('moderation.UnBlock', params), moderation_block_list: (params: ModerationBlockParams) => fetchCommentsApi('moderation.BlockedList', params), moderation_add_delegate: (params: ModerationAddDelegateParams) => fetchCommentsApi('moderation.AddDelegate', params), moderation_remove_delegate: (params: ModerationRemoveDelegateParams) => fetchCommentsApi('moderation.RemoveDelegate', params), moderation_list_delegates: (params: ModerationListDelegatesParams) => fetchCommentsApi('moderation.ListDelegates', params), moderation_am_i: (params: ModerationAmIParams) => fetchCommentsApi('moderation.AmI', params), comment_list: (params: CommentListParams) => fetchCommentsApi('comment.List', params), comment_abandon: (params: CommentAbandonParams) => fetchCommentsApi('comment.Abandon', params), comment_create: (params: CommentCreateParams) => fetchCommentsApi('comment.Create', params), comment_by_id: (params: CommentByIdParams) => fetchCommentsApi('comment.ByID', params), comment_pin: (params: CommentPinParams) => fetchCommentsApi('comment.Pin', params), comment_edit: (params: CommentEditParams) => fetchCommentsApi('comment.Edit', params), reaction_list: (params: ReactionListParams) => fetchCommentsApi('reaction.List', params), reaction_react: (params: ReactionReactParams) => fetchCommentsApi('reaction.React', params), setting_list: (params: SettingsParams) => fetchCommentsApi('setting.List', params), setting_block_word: (params: BlockWordParams) => fetchCommentsApi('setting.BlockWord', params), setting_unblock_word: (params: BlockWordParams) => fetchCommentsApi('setting.UnBlockWord', params), setting_list_blocked_words: (params: SettingsParams) => fetchCommentsApi('setting.ListBlockedWords', params), setting_update: (params: UpdateSettingsParams) => fetchCommentsApi('setting.Update', params), super_list: (params: SuperListParams) => fetchCommentsApi('comment.SuperChatList', params), }; function fetchCommentsApi(method: string, params: {}) { if (!Comments.url) { return Promise.reject(new Error('Commenting server is not set.')); } else if (!Comments.enabled) { return Promise.reject('Comments are not currently enabled.'); // eslint-disable-line } const url = `${Comments.url}?m=${method}`; const options = { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params, }), }; return fetch(url, options) .then((res) => res.json()) .then((res) => { if (res.error) { throw new Error(res.error.message); } return res.result; }); } export default Comments;