apiv3-client.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // eslint-disable-next-line no-restricted-imports
  2. import type { AxiosResponse } from 'axios';
  3. import 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. const errorInfo = _err.response ? _err.response.data.info : undefined;
  15. for (const err of errs) {
  16. logger.error(err.message);
  17. }
  18. if (errorInfo != null) {
  19. logger.error('additional info:', errorInfo);
  20. }
  21. return errs;
  22. };
  23. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  24. export async function apiv3Request<T = any>(method: string, path: string, params: unknown): Promise<AxiosResponse<T>> {
  25. try {
  26. const res = await axios[method](urljoin(apiv3Root, path), params);
  27. return res;
  28. }
  29. catch (err) {
  30. const errors = apiv3ErrorHandler(err);
  31. throw errors;
  32. }
  33. }
  34. export async function apiv3Get<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  35. return apiv3Request('get', path, { params });
  36. }
  37. export async function apiv3Post<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  38. return apiv3Request('post', path, params);
  39. }
  40. export async function apiv3PostForm<T = any>(path: string, formData: FormData): Promise<AxiosResponse<T>> {
  41. return apiv3Request('postForm', path, formData);
  42. }
  43. export async function apiv3Put<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  44. return apiv3Request('put', path, params);
  45. }
  46. export async function apiv3Delete<T = any>(path: string, params: unknown = {}): Promise<AxiosResponse<T>> {
  47. return apiv3Request('delete', path, { params });
  48. }