const MszCommentsApi = (() => { return { getCategory: async name => { if(typeof name !== 'string' || name.trim() === '') throw new Error('name is not a valid category name'); const { status, body } = await $xhr.get( `/comments/categories/${name}`, { type: 'json' } ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, updateCategory: async (name, args) => { if(typeof name !== 'string' || name.trim() === '') throw new Error('name is not a valid category name'); if(typeof args !== 'object' || args === null) throw new Error('args must be a non-null object'); const { status, body } = await $xhr.post( `/comments/categories/${name}`, { csrf: true, type: 'json' }, args ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, getPost: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status, body } = await $xhr.get( `/comments/posts/${post}`, { type: 'json' } ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, getPostReplies: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status, body } = await $xhr.get( `/comments/posts/${post}/replies`, { type: 'json' } ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, createPost: async args => { if(typeof args !== 'object' || args === null) throw new Error('args must be a non-null object'); const { status, body } = await $xhr.post( '/comments/posts', { csrf: true, type: 'json' }, args ); if(status !== 201) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, updatePost: async (post, args) => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); if(typeof args !== 'object' || args === null) throw new Error('args must be a non-null object'); const { status, body } = await $xhr.post( `/comments/posts/${post}`, { csrf: true, type: 'json' }, args ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, deletePost: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status, body } = await $xhr.delete(`/comments/posts/${post}`, { csrf: true, type: 'json' }); if(status !== 204) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); }, restorePost: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status, body } = await $xhr.post(`/comments/posts/${post}/restore`, { csrf: true, type: 'json' }); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); }, nukePost: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status } = await $xhr.post(`/comments/posts/${post}/nuke`, { csrf: true, type: 'json' }); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); }, createVote: async (post, vote) => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); if(typeof vote === 'string') vote = parseInt(vote); if(typeof vote !== 'number' || isNaN(vote)) throw new Error('vote must be a number'); const { status, body } = await $xhr.post( `/comments/posts/${post}/vote`, { csrf: true, type: 'json' }, { vote } ); if(status !== 201) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, deleteVote: async post => { if(typeof post !== 'string' || post.trim() === '') throw new Error('post is not a valid post id'); const { status, body } = await $xhr.delete( `/comments/posts/${post}/vote`, { csrf: true, type: 'json' } ); if(status !== 200) throw new Error(body.error?.text ?? 'something went wrong', { cause: body.error?.name ?? 'something' }); return body; }, }; })();