import axios, { type AxiosRequestTransformer, type AxiosResponseTransformer } from ‘axios’; import { convertKeys, type objectToConvert } from ‘../utils/case-converter’; import { csrfToken } from ‘../utils/csrf-token’;

const api = axios.create({

transformRequest: [
  (data: objectToConvert) => convertKeys(data, 'decamelize'),
  ...(axios.defaults.transformRequest as AxiosRequestTransformer[]),
],
transformResponse: [
  ...(axios.defaults.transformResponse as AxiosResponseTransformer[]),
  (data: objectToConvert) => convertKeys(data, 'camelize'),
],
headers: {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-CSRF-Token': csrfToken(),
},

});

export { api };

/* // Example to use the api object in the path ´app/javascript/api/users.ts´

import { api } from ‘./index’;

function index() {

const path = '/api/internal/users';

return api({
  method: 'get',
  url: path,
});

}

function create(data: Partial<User>) {

const path = '/api/internal/users';

return api({
  method: 'post',
  url: path,
  data: {
    user: data,
  },
});

}

function update(data: Partial<User>) {

const path = `/api/internal/users/${data.id}`;

return api({
  method: 'put',
  url: path,
  data: {
    user: data,
  },
});

}

export { index, create, update };

*/