quotations

Форк
0
/
api-client.ts 
46 строк · 1.2 Кб
1
import { API_URL } from "@/shared/config";
2
import type { IApiResponse } from "./base-api.types.ts";
3

4
export class ApiClient {
5
  private readonly baseUrl: string;
6

7
  constructor(url: string) {
8
    this.baseUrl = url;
9
  }
10

11
  private async handleResponse<TResult>(response: Response): Promise<TResult> {
12
    if (!response.ok) {
13
      throw new Error(`HTTP error! Status: ${response.status}`);
14
    }
15

16
    try {
17
      return await response.json();
18
    } catch (error) {
19
      throw new Error("Error parsing JSON response");
20
    }
21
  }
22

23
  public async get<TResult = unknown>(
24
    endpoint: string,
25
    queryParams?: Record<string, string | number>,
26
  ): Promise<IApiResponse<TResult>> {
27
    const url = new URL(endpoint, this.baseUrl);
28

29
    if (queryParams) {
30
      Object.entries(queryParams).forEach(([key, value]) => {
31
        url.searchParams.append(key, value.toString());
32
      });
33
    }
34

35
    const response = await fetch(url.toString(), {
36
      method: "GET",
37
      // headers: {
38
      //   "Content-Type": "application/json",
39
      // },
40
      // this headers blocking cors
41
    });
42

43
    return this.handleResponse<IApiResponse<TResult>>(response);
44
  }
45
}
46
export const apiClient = new ApiClient(API_URL);
47

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.