diff --git a/src/api/tickets.ts b/src/api/tickets.ts index 245068d..c9bbad8 100644 --- a/src/api/tickets.ts +++ b/src/api/tickets.ts @@ -1,14 +1,16 @@ +import makeRequest from "@root/kitUI/makeRequest"; +import { GetMessagesRequest, GetMessagesResponse, GetTicketsRequest, GetTicketsResponse, SendTicketMessageRequest } from "@root/model/ticket"; import ReconnectingEventSource from "reconnecting-eventsource"; +const supportApiUrl = "https://admin.pena.digital/heruvym"; + export function subscribeToAllTickets({ onMessage, onError, accessToken }: { accessToken: string; onMessage: (e: MessageEvent) => void; onError: (e: Event) => void; }) { - if (!accessToken) throw new Error("Trying to subscribe to SSE without access token"); - - const url = `https://admin.pena.digital/heruvym/subscribe?Authorization=${accessToken}`; + const url = `${supportApiUrl}/subscribe?Authorization=${accessToken}`; const eventSource = new ReconnectingEventSource(url); eventSource.addEventListener("open", () => console.log(`EventSource connected with ${url}`)); @@ -19,4 +21,68 @@ export function subscribeToAllTickets({ onMessage, onError, accessToken }: { return () => { eventSource.close(); }; +} + +export function subscribeToTicketMessages({ onMessage, onError, accessToken, ticketId }: { + accessToken: string; + ticketId: string; + onMessage: (e: MessageEvent) => void; + onError: (e: Event) => void; +}) { + const url = `${supportApiUrl}/ticket?ticket=${ticketId}&Authorization=${accessToken}`; + const eventSource = new ReconnectingEventSource(url); + + eventSource.addEventListener("open", () => console.log(`EventSource connected with ${url}`)); + eventSource.addEventListener("close", () => console.log(`EventSource closed with ${url}`)); + eventSource.addEventListener("message", onMessage); + eventSource.addEventListener("error", onError); + + return () => { + eventSource.close(); + }; +} + +export async function getTickets({ body, signal }: { + body: GetTicketsRequest; + signal: AbortSignal; +}): Promise { + return makeRequest({ + url: `${supportApiUrl}/getTickets`, + method: "POST", + useToken: true, + body, + signal, + }).then(response => { + const result = (response as any).data as GetTicketsResponse; + console.log("GetTicketsResponse", result); + return result; + }); +} + +export async function getTicketMessages({ body, signal }: { + body: GetMessagesRequest; + signal: AbortSignal; +}): Promise { + return makeRequest({ + url: `${supportApiUrl}/getMessages`, + method: "POST", + useToken: true, + body, + signal, + }).then(response => { + const result = (response as any).data as GetMessagesResponse; + console.log("GetMessagesResponse", result); + return result; + }); +} + +export async function sendTicketMessage({ body }: { + body: SendTicketMessageRequest; +}) { + return makeRequest({ + url: `${supportApiUrl}/send`, + method: "POST", + useToken: true, + body, + }); } \ No newline at end of file