apiv3-client.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // eslint-disable-next-line no-restricted-imports
  2. import { AxiosResponse } from 'axios';
  3. import * as urljoin from 'url-join';
  4. // eslint-disable-next-line no-restricted-imports
  5. import { toArrayIfNot } from '~/utils/array-utils';
  6. import axios from '~/utils/axios';
  7. import loggerFactory from '~/utils/logger';
  8. const apiv3Root = '/_api/v3';
  9. const logger = loggerFactory('growi:apiv3');
  10. const apiv3ErrorHandler = (_err: any): any[] => {
  11. // extract api errors from general 400 err
  12. const err = _err.response ? _err.response.data.errors : _err;
  13. const errs = toArrayIfNot(err);
  14. for (const err of errs) {
  15. logger.error(err.message);
  16. }
  17. return errs;
  18. };
  19. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  20. export async function apiv3Request<T = any>(method: string, path: string, params: unknown): Promise<AxiosResponse<T>> {
  21. try {
  22. const res = await axios[method](urljoin(apiv3Root, path), params);
  23. return res;
  24. }
  25. catch (err) {
  26. const errors = apiv3ErrorHandler(err);
  27. throw errors;
  28. }
  29. }
  30. export async function apiv3Get<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  31. return apiv3Request('get', path, { params });
  32. }
  33. export async function apiv3Post<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  34. return apiv3Request('post', path, params);
  35. }
  36. export async function apiv3PostForm<T = any>(path: string, formData: FormData): Promise<AxiosResponse<T>> {
  37. return apiv3Post<T>(path, formData);
  38. }
  39. export async function apiv3Put<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  40. return apiv3Request('put', path, params);
  41. }
  42. export async function apiv3Delete<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  43. return apiv3Request('delete', path, { params });
  44. }