2023-03-21 12:58:06 +00:00
|
|
|
import makeRequest from "@root/kitUI/makeRequest";
|
|
|
|
import { GetMessagesRequest, GetMessagesResponse, GetTicketsRequest, GetTicketsResponse, SendTicketMessageRequest } from "@root/model/ticket";
|
2023-03-20 15:27:01 +00:00
|
|
|
import ReconnectingEventSource from "reconnecting-eventsource";
|
|
|
|
|
|
|
|
|
2023-03-21 12:58:06 +00:00
|
|
|
const supportApiUrl = "https://admin.pena.digital/heruvym";
|
|
|
|
|
2023-03-20 15:27:01 +00:00
|
|
|
export function subscribeToAllTickets({ onMessage, onError, accessToken }: {
|
|
|
|
accessToken: string;
|
|
|
|
onMessage: (e: MessageEvent) => void;
|
|
|
|
onError: (e: Event) => void;
|
|
|
|
}) {
|
2023-03-21 12:58:06 +00:00
|
|
|
const url = `${supportApiUrl}/subscribe?Authorization=${accessToken}`;
|
|
|
|
|
2023-03-29 14:17:00 +00:00
|
|
|
const eventSource = createEventSource(onMessage, onError, url);
|
2023-03-20 15:27:01 +00:00
|
|
|
|
2023-03-21 12:58:06 +00:00
|
|
|
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}`;
|
2023-03-20 15:27:01 +00:00
|
|
|
|
2023-03-29 14:17:00 +00:00
|
|
|
const eventSource = createEventSource(onMessage, onError, url);
|
2023-03-20 15:27:01 +00:00
|
|
|
|
|
|
|
return () => {
|
|
|
|
eventSource.close();
|
|
|
|
};
|
2023-03-21 12:58:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function getTickets({ body, signal }: {
|
|
|
|
body: GetTicketsRequest;
|
|
|
|
signal: AbortSignal;
|
|
|
|
}): Promise<GetTicketsResponse> {
|
|
|
|
return makeRequest({
|
|
|
|
url: `${supportApiUrl}/getTickets`,
|
|
|
|
method: "POST",
|
|
|
|
useToken: true,
|
|
|
|
body,
|
|
|
|
signal,
|
|
|
|
}).then(response => {
|
|
|
|
const result = (response as any).data as GetTicketsResponse;
|
|
|
|
return result;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function getTicketMessages({ body, signal }: {
|
|
|
|
body: GetMessagesRequest;
|
|
|
|
signal: AbortSignal;
|
|
|
|
}): Promise<GetMessagesResponse> {
|
|
|
|
return makeRequest({
|
|
|
|
url: `${supportApiUrl}/getMessages`,
|
|
|
|
method: "POST",
|
|
|
|
useToken: true,
|
|
|
|
body,
|
|
|
|
signal,
|
|
|
|
}).then(response => {
|
|
|
|
const result = (response as any).data as GetMessagesResponse;
|
|
|
|
return result;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function sendTicketMessage({ body }: {
|
|
|
|
body: SendTicketMessageRequest;
|
|
|
|
}) {
|
|
|
|
return makeRequest({
|
|
|
|
url: `${supportApiUrl}/send`,
|
|
|
|
method: "POST",
|
|
|
|
useToken: true,
|
|
|
|
body,
|
|
|
|
});
|
2023-03-29 14:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function createEventSource(onMessage: (e: MessageEvent) => void, onError: (e: Event) => void, url: string) {
|
|
|
|
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;
|
2023-03-20 15:27:01 +00:00
|
|
|
}
|