| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- // @ts-check
- const { fetchJson, fetchNothing } = require('@overleaf/fetch-utils')
- const settings = require('@overleaf/settings')
- const { callbackify } = require('util')
- async function getThreads(projectId) {
- return await fetchJson(chatApiUrl(`/project/${projectId}/threads`))
- }
- async function destroyProject(projectId) {
- await fetchNothing(chatApiUrl(`/project/${projectId}`), { method: 'DELETE' })
- }
- async function sendGlobalMessage(projectId, userId, content) {
- const message = await fetchJson(
- chatApiUrl(`/project/${projectId}/messages`),
- {
- method: 'POST',
- json: { user_id: userId, content },
- }
- )
- return message
- }
- async function getGlobalMessages(projectId, limit, before) {
- const url = chatApiUrl(`/project/${projectId}/messages`)
- if (limit != null) {
- url.searchParams.set('limit', limit)
- }
- if (before != null) {
- url.searchParams.set('before', before)
- }
- return await fetchJson(url)
- }
- async function sendComment(projectId, threadId, userId, content) {
- const comment = await fetchJson(
- chatApiUrl(`/project/${projectId}/thread/${threadId}/messages`),
- {
- method: 'POST',
- json: { user_id: userId, content },
- }
- )
- return comment
- }
- async function resolveThread(projectId, threadId, userId) {
- await fetchNothing(
- chatApiUrl(`/project/${projectId}/thread/${threadId}/resolve`),
- {
- method: 'POST',
- json: { user_id: userId },
- }
- )
- }
- async function reopenThread(projectId, threadId) {
- await fetchNothing(
- chatApiUrl(`/project/${projectId}/thread/${threadId}/reopen`),
- { method: 'POST' }
- )
- }
- async function deleteThread(projectId, threadId) {
- await fetchNothing(chatApiUrl(`/project/${projectId}/thread/${threadId}`), {
- method: 'DELETE',
- })
- }
- async function editMessage(projectId, threadId, messageId, userId, content) {
- await fetchNothing(
- chatApiUrl(
- `/project/${projectId}/thread/${threadId}/messages/${messageId}/edit`
- ),
- {
- method: 'POST',
- json: { content, userId },
- }
- )
- }
- async function deleteMessage(projectId, threadId, messageId) {
- await fetchNothing(
- chatApiUrl(
- `/project/${projectId}/thread/${threadId}/messages/${messageId}`
- ),
- { method: 'DELETE' }
- )
- }
- async function getResolvedThreadIds(projectId) {
- const body = await fetchJson(
- chatApiUrl(`/project/${projectId}/resolved-thread-ids`)
- )
- return body.resolvedThreadIds
- }
- function chatApiUrl(path) {
- return new URL(path, settings.apis.chat.internal_url)
- }
- module.exports = {
- getThreads: callbackify(getThreads),
- destroyProject: callbackify(destroyProject),
- sendGlobalMessage: callbackify(sendGlobalMessage),
- getGlobalMessages: callbackify(getGlobalMessages),
- sendComment: callbackify(sendComment),
- resolveThread: callbackify(resolveThread),
- reopenThread: callbackify(reopenThread),
- deleteThread: callbackify(deleteThread),
- editMessage: callbackify(editMessage),
- deleteMessage: callbackify(deleteMessage),
- getResolvedThreadIds: callbackify(getResolvedThreadIds),
- promises: {
- getThreads,
- destroyProject,
- sendGlobalMessage,
- getGlobalMessages,
- sendComment,
- resolveThread,
- reopenThread,
- deleteThread,
- editMessage,
- deleteMessage,
- getResolvedThreadIds,
- },
- }
|