Files
crates/client/src/actions.ts
T
2022-08-20 22:36:17 +10:00

80 lines
2.2 KiB
TypeScript

import axios, { AxiosInstance } from 'axios';
type ApiResponse = [string | null, any | null];
declare module 'axios' {
export interface AxiosInstance {
request(config: AxiosRequestConfig): Promise<ApiResponse>;
get(url: string, config?: AxiosRequestConfig): Promise<ApiResponse>;
delete(url: string, config?: AxiosRequestConfig): Promise<ApiResponse>;
head(url: string, config?: AxiosRequestConfig): Promise<ApiResponse>;
post(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse>;
put(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse>;
patch(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse>;
}
}
const api = axios.create({
baseURL: 'http://localhost:41337',
withCredentials: true
});
function onSuccess(response) {
return [null, response.data];
}
function onError(error) {
if (error.response) return [error.response.data.error, null];
if (error.request) return ['Network Error', null];
return ['Unknown Error', null];
}
api.interceptors.response.use(onSuccess, onError);
const actions = {
getBundles: async function getBundles() {
return api.get('/bundles');
},
getOffers: async function getOffers() {
return api.get('/user/offers');
},
getWants: async function getWants() {
return api.get('/want/all');
},
postWantSearch: async function postWantSearch(artist, title) {
return api.post('/want/search', { artist, title });
},
postWant: async function postWant(releaseId) {
return api.post('/want', { releaseId });
},
postDiscogs: async function postDiscogs(username) {
return api.post('/want/discogs', { username });
},
getLogin: async function getLogin() {
return api.get('/auth/login')
},
postLogin: async function postLogin(email, password) {
return api.post('/auth/login', {
email,
password,
// discogs,
});
},
postRegister: async function postRegister(email, password) {
return api.post('/auth/register', {
email,
password,
});
},
};
export default actions;