Chat: Team-API und Laden des Chat-Bausteins vom Kundenportal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fce2f41463
commit
717a3323fa
3 files changed
+109
-2
No files matched your search
+32
-2
@@ -1,14 +1,18 @@
|
||||
import { account } from './appwrite'
|
||||
import { createFinanceRequest } from './financeRequest'
|
||||
import { createJwtCache } from './serverpulsAuth'
|
||||
|
||||
/**
|
||||
* Client fuer den Team-Eingang des Kundenportals (/api/team): alle Mitarbeiter, Appwrite-JWT (Bearer).
|
||||
* Anfrage-Kern (JWT-Cache, Wiederholung bei 401, deutsche Fehlertexte) wie bei den Finanzen: financeRequest.js.
|
||||
*/
|
||||
const PROJECT_ADMIN_URL =
|
||||
export const PORTAL_URL =
|
||||
import.meta.env.VITE_PROJECT_ADMIN_URL || 'https://project.webklar.com'
|
||||
|
||||
const request = createFinanceRequest({ baseUrl: `${PROJECT_ADMIN_URL}/api/team`, createJWT: () => account.createJWT() })
|
||||
const request = createFinanceRequest({ baseUrl: `${PORTAL_URL}/api/team`, createJWT: () => account.createJWT() })
|
||||
|
||||
// Eigenes JWT fuer Anfragen, die nicht ueber request laufen (Hochladen im Chat-Baustein), 10 Minuten gecacht
|
||||
const jwtCache = createJwtCache({ createJWT: () => account.createJWT() })
|
||||
|
||||
const enc = encodeURIComponent
|
||||
|
||||
@@ -29,3 +33,29 @@ export async function createPreviewLink({ subdomain, previewUrl }) {
|
||||
const { openUrl } = await request('/preview-link', { method: 'POST', body: { subdomain, previewUrl } })
|
||||
return openUrl
|
||||
}
|
||||
|
||||
// --- Chat (Messenger, Reiter "Chat", Zahl in der Sidebar) ---
|
||||
|
||||
/** { chats: [{ customerId, customerName, lastText, lastSender, lastAt, unreadFromCustomer }] } */
|
||||
export const listChats = () => request('/chats')
|
||||
|
||||
/** { unread } */
|
||||
export const getChatUnreadCount = () => request('/chats/unread-count')
|
||||
|
||||
/** { messages }; mit since nur neuere (Abfrage im offenen Gespraech) */
|
||||
export const getChatMessages = (customerId, since = '') =>
|
||||
request(`/chats/${enc(customerId)}/messages${since ? `?since=${enc(since)}` : ''}`)
|
||||
|
||||
/** { message, notice } */
|
||||
export const sendChatMessage = (customerId, { text, attachmentIds }) =>
|
||||
request(`/chats/${enc(customerId)}/messages`, { method: 'POST', body: { text, attachmentIds } })
|
||||
|
||||
export const markChatRead = (customerId) => request(`/chats/${enc(customerId)}/read`, { method: 'POST', body: {} })
|
||||
|
||||
/** Upload-Adresse fuer den Chat-Baustein (POST roh, DELETE <url>/<id>) */
|
||||
export const chatUploadUrl = (customerId) => `${PORTAL_URL}/api/team/chats/${enc(customerId)}/attachments`
|
||||
|
||||
/** Header fuer den Chat-Baustein (Option requestHeaders) */
|
||||
export async function teamAuthHeaders() {
|
||||
return { Authorization: `Bearer ${await jwtCache.get()}` }
|
||||
}
|
||||
Reference in new issue
Block a user