apiv1-client.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import urljoin from 'url-join';
  2. import axios from '~/utils/axios';
  3. const apiv1Root = '/_api';
  4. class Apiv1ErrorHandler extends Error {
  5. code;
  6. data;
  7. constructor(message = '', code = '', data = '') {
  8. super();
  9. this.message = message;
  10. this.code = code;
  11. this.data = data;
  12. }
  13. }
  14. export async function apiRequest<T>(method: string, path: string, params: unknown): Promise<T> {
  15. const res = await axios[method](urljoin(apiv1Root, path), params);
  16. if (res.data.ok) {
  17. return res.data;
  18. }
  19. // Return error code if code is exist
  20. if (res.data.code != null) {
  21. const error = new Apiv1ErrorHandler(res.data.error, res.data.code, res.data.data);
  22. throw error;
  23. }
  24. throw new Error(res.data.error);
  25. }
  26. export async function apiGet<T>(path: string, params: unknown = {}): Promise<T> {
  27. return apiRequest<T>('get', path, { params });
  28. }
  29. export async function apiPost<T>(path: string, params: unknown = {}): Promise<T> {
  30. return apiRequest<T>('post', path, params);
  31. }
  32. export async function apiPostForm<T>(path: string, formData: FormData): Promise<T> {
  33. return apiRequest<T>('postForm', path, formData);
  34. }
  35. export async function apiDelete<T>(path: string, params: unknown = {}): Promise<T> {
  36. return apiRequest<T>('delete', path, { data: params });
  37. }