remove unused code

This commit is contained in:
nflnkr 2023-03-31 18:01:31 +03:00
parent 0e14bf7d1e
commit bb1ac0a756
5 changed files with 0 additions and 455 deletions

@ -7,11 +7,6 @@ import { authStore } from "@stores/makeRequest"
import CustomButton from "@components/CustomButton";
import InputTextfield from "@components/InputTextfield";
import PenaLogo from "@components/PenaLogo";
import { apiRequestHandler } from "@utils/api/apiRequestHandler";
import { ApiError } from "@utils/api/types";
import { useSnackbar } from "notistack";
interface Values {

@ -1,5 +1,4 @@
import { Box, IconButton, Link, Typography, useMediaQuery, useTheme } from "@mui/material";
import { apiRequestHandler } from "@utils/api/apiRequestHandler";
import { useNavigate } from "react-router-dom";
import { useFormik } from "formik";
import CloseIcon from "@mui/icons-material/Close";
@ -7,7 +6,6 @@ import CloseIcon from "@mui/icons-material/Close";
import CustomButton from "@components/CustomButton";
import InputTextfield from "@components/InputTextfield";
import PenaLogo from "@components/PenaLogo";
import { ApiError } from "@utils/api/types";
import { useSnackbar } from "notistack";
import {authStore} from "@stores/makeRequest";

@ -1,106 +0,0 @@
import { apiRequestHandler } from "./apiRequestHandler";
import { AuthenticationSuccessResponse } from "./types";
import "isomorphic-fetch";
describe("authentication", () => {
const authSuccessResultMatcher: AuthenticationSuccessResponse = {
id: expect.any(String),
email: expect.any(String),
login: expect.any(String),
phoneNumber: expect.any(String),
avatar: expect.any(String),
role: expect.any(String),
accessToken: expect.any(String),
};
describe("register route", () => {
it("should return an error if any field is empty", async () => {
const randomNumber = Math.floor(Math.random() * 1e6);
await expect(apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: ""
})).resolves.toBeInstanceOf(Error);
});
it("should return an error if user already exists", async () => {
const randomNumber = Math.floor(Math.random() * 1e6);
await apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: "1234"
});
await expect(apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: "12345"
})).resolves.toBeInstanceOf(Error);
});
it("should return user object on register success", async () => {
const randomNumber = Math.floor(Math.random() * 1e6);
const result = await apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: "1234567890"
});
expect(result).toStrictEqual(authSuccessResultMatcher);
});
});
describe("login route", () => {
const randomNumber = Math.floor(Math.random() * 1e6);
beforeAll(async () => {
await apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: "123456"
});
});
it("should return an error if any field is empty", async () => {
await expect(apiRequestHandler.login({
email: `test${randomNumber}@test.com`,
password: ""
})).resolves.toBeInstanceOf(Error);
});
it("should return an error if password is wrong", async () => {
await expect(apiRequestHandler.login({
email: `test${randomNumber}@test.com`,
password: "wrong_password"
})).resolves.toBeInstanceOf(Error);
});
it("should return user object on login success", async () => {
const result = await apiRequestHandler.login({
email: `test${randomNumber}@test.com`,
password: "password"
});
expect(result).toStrictEqual(authSuccessResultMatcher);
});
});
/**
* TODO
* 1. jest не отсылает куки с запросом -> возвращается пустой объект без refreshToken
* https://github.com/facebook/jest/issues/3547
* 2. Сервер возвращает https-only куки, но сервер использует http.
*/
describe("logout route", () => {
const randomNumber = Math.floor(Math.random() * 1e6);
it("should return refresh token", async () => {
await apiRequestHandler.register({
email: `test${randomNumber}@test.com`,
login: `test${randomNumber}`,
password: "password",
phoneNumber: "123456"
});
await apiRequestHandler.login({
email: `test${randomNumber}@test.com`,
password: "password",
});
const result = await apiRequestHandler.logout();
expect(result).toStrictEqual({ refreshToken: expect.any(String) });
});
});
});

@ -1,236 +0,0 @@
import {
RegistrationRequest,
AuthenticationSuccessResponse,
LoginRequest,
RefreshRequest,
CreateTicketRequest,
CreateTicketResponse,
SendTicketMessageRequest,
GetTicketsRequest,
GetTicketsResponse,
ApiError,
GetMessagesRequest,
GetMessagesResponse
} from "./types";
import ReconnectingEventSource from "reconnecting-eventsource";
const TEST_ACCESS_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6ImMxcDM0YjhqZHBmOG04Zm43cnIwIiwiU2Vzc2lvbiI6ImMxcDM0YjhqZHBmOG04Zm43cnJnIiwiVXNlciI6IiIsIlRhcmlmZiI6MCwiQ3JlYXRlZCI6MTYxODA5NjY4NTc4MCwiTGFzdFNlZW4iOjE2MTgwOTY2ODU3ODF9.ciJoJiOxzIPv0LY4h3rG8Tf3AsSBXXLcYEpyN9mIki0";
/** @deprecated */
class ApiRequestHandler {
private authApiUrl: string;
private supportApiUrl: string;
private accessToken?: string;
constructor({ authApiUrl, supportApiUrl }: {
authApiUrl: string;
supportApiUrl: string;
}) {
this.authApiUrl = authApiUrl;
this.supportApiUrl = supportApiUrl;
this.accessToken = TEST_ACCESS_TOKEN;
}
public async register(request: RegistrationRequest): Promise<AuthenticationSuccessResponse | ApiError | Error> {
try {
const response = await fetch(this.authApiUrl + "auth/register", {
method: "POST",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json"
},
});
const result = await response.json();
if (result.error) return new ApiError(result.message);
this.accessToken = (result as AuthenticationSuccessResponse).accessToken;
return result as AuthenticationSuccessResponse;
} catch (error) {
return error as Error;
}
}
public async login(request: LoginRequest): Promise<AuthenticationSuccessResponse | ApiError | Error> {
try {
const response = await fetch(this.authApiUrl + "auth/login", {
method: "POST",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json"
},
});
const result = await response.json();
if (result.error) return new ApiError(result.message);
this.accessToken = (result as AuthenticationSuccessResponse).accessToken;
return result as AuthenticationSuccessResponse;
} catch (error) {
return error as Error;
}
}
public async refresh(request: RefreshRequest) {
try {
const response = await fetch(this.authApiUrl + "auth/refresh", {
method: "POST",
credentials: "include",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json"
},
});
const result = await response.json();
return result;
} catch (error) {
return error;
}
}
public async logout(): Promise<null | ApiError | Error> {
try {
const response = await fetch(this.authApiUrl + "auth/logout", {
method: "POST",
credentials: "include"
});
if (response.status !== 200) return new ApiError(`Unexpected status code. Expected: 200, received: ${response.status}`); // TODO correct success status code
return null;
} catch (error) {
return error as Error;
}
}
public async createTicket(request: CreateTicketRequest): Promise<CreateTicketResponse | ApiError | Error> {
try {
const response = await fetch(this.supportApiUrl + "support/create", {
method: "POST",
credentials: "include",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json",
"Authorization": `Bearer ${this.accessToken}`,
},
});
const result = await response.json();
if (result.error) return new ApiError(result.message);
return result as CreateTicketResponse;
} catch (error) {
return error as Error;
}
}
public subscribeToAllTickets({ onMessage, onError }: {
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
}) {
if (!this.accessToken) throw new Error("Trying to subscribe to SSE without access token");
const url = `${this.supportApiUrl}/support/subscribe?Authorization=${this.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);
/**
* TODO
* Похоже, что сервер закрывает соединение после каждого сообщения и EventSource выдает ошибку, после чего переподключается и так каждые 3 секунды
* https://stackoverflow.com/questions/66047672/server-sent-events-error-despite-http-200
* https://stackoverflow.com/questions/53888030/why-are-server-sent-events-fired-every-3-seconds
*/
return () => {
eventSource.close();
};
}
public subscribeToTicket({ ticketId, onMessage, onError }: {
ticketId: string;
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
}) {
if (!this.accessToken) throw new Error("Trying to subscribe to SSE without access token");
const url = `${this.supportApiUrl}/support/ticket?ticket=${ticketId}&Authorization=${this.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();
};
}
public async sendTicketMessage(request: SendTicketMessageRequest): Promise<null | ApiError | Error> {
try {
const response = await fetch(this.supportApiUrl + "support/send", {
method: "POST",
credentials: "include",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json",
"Authorization": `Bearer ${this.accessToken}`,
},
});
if (response.status !== 200) return new ApiError(`Unexpected status code. Expected: 200, received: ${response.status}`); // TODO correct success status code
return null;
} catch (error) {
return error as Error;
}
}
public async getTickets(request: GetTicketsRequest, signal: AbortSignal): Promise<GetTicketsResponse | ApiError | Error> {
try {
const response = await fetch(this.supportApiUrl + "support/getTickets", {
method: "POST",
credentials: "include",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json",
"Authorization": `Bearer ${this.accessToken}`,
},
signal,
});
const result = await response.json();
if (result.error) return new ApiError(result.message);
return result as GetTicketsResponse;
} catch (error) {
return error as Error;
}
}
public async getMessages(request: GetMessagesRequest, signal: AbortSignal): Promise<GetMessagesResponse | ApiError | Error> {
try {
const response = await fetch(this.supportApiUrl + "support/getMessages", {
method: "POST",
credentials: "include",
body: JSON.stringify(request),
headers: {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json",
"Authorization": `Bearer ${this.accessToken}`,
},
signal,
});
const result = await response.json();
if (result.error) return new ApiError(result.message);
return result as GetMessagesResponse;
} catch (error) {
return error as Error;
}
}
}
/** @deprecated */
export const apiRequestHandler = new ApiRequestHandler({
authApiUrl: "http://localhost:8080/",
supportApiUrl: "http://localhost:1488/",
});

@ -1,106 +0,0 @@
/** @deprecated */
export type LoginRequest = {
email?: string;
password?: string;
};
/** @deprecated */
export type RegistrationRequest = {
login?: string;
email?: string;
phoneNumber?: string;
password?: string;
};
/** @deprecated */
export type AuthenticationSuccessResponse = {
id: string;
email: string;
login: string;
phoneNumber: string;
avatar: string;
role: string;
accessToken: string;
};
/** @deprecated */
export type RefreshRequest = {
userId: string;
refreshToken?: string;
};
/** @deprecated */
export type CreateTicketRequest = {
Title: string;
Message: string;
};
/** @deprecated */
export type CreateTicketResponse = {
Ticket: string;
};
/** @deprecated */
export type SendTicketMessageRequest = {
message: string;
ticket: string;
lang: string;
files: string[];
};
/** @deprecated */
export type GetTicketsRequest = {
amt: number;
page: number;
srch: string;
status: string;
};
/** @deprecated */
export type GetTicketsResponse = {
count: number;
data: Ticket[];
};
/** @deprecated */
export type Ticket = {
id: string;
user: string;
sess: string;
ans: string;
state: string;
top_message: TicketMessage;
title: string;
created_at: string;
updated_at: string;
rate: number;
};
/** @deprecated */
export type TicketMessage = {
id: string;
ticket_id: string;
user_id: string,
session_id: string;
message: string;
files: string[],
shown: { [key: string]: number; },
request_screenshot: string,
created_at: string;
};
/** @deprecated */
export type GetMessagesRequest = {
amt: number;
page: number;
srch: string;
ticket: string;
};
/** @deprecated */
export type GetMessagesResponse = TicketMessage[];
/** @deprecated */
export class ApiError extends Error { }