mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { type AlovaXHRResponse, xhrRequestAdapter } from '@alova/adapter-xhr';
|
|
import { createAlova } from 'alova';
|
|
import ReactHook from 'alova/react';
|
|
|
|
import { unpack } from './unpack';
|
|
|
|
export const ACCESS_TOKEN = 'access_token';
|
|
|
|
export const alovaInstance = createAlova({
|
|
statesHook: ReactHook,
|
|
timeout: 3000, // 3 seconds before throwing a timeout error
|
|
cacheFor: {
|
|
GET: {
|
|
mode: 'memory',
|
|
expire: 60 * 10 * 1000 // 60 seconds in cache
|
|
}
|
|
},
|
|
requestAdapter: xhrRequestAdapter(),
|
|
beforeRequest(method) {
|
|
if (localStorage.getItem(ACCESS_TOKEN)) {
|
|
method.config.headers.Authorization =
|
|
'Bearer ' + localStorage.getItem(ACCESS_TOKEN);
|
|
}
|
|
},
|
|
|
|
responded: {
|
|
onSuccess: async (response: AlovaXHRResponse) => {
|
|
// if (response.status === 202) {
|
|
// throw new Error('Wait'); // wifi scan in progress
|
|
// } else
|
|
if (response.status === 205) {
|
|
throw new Error('Reboot required');
|
|
} else if (response.status === 400) {
|
|
throw new Error('Request Failed');
|
|
} else if (response.status >= 400) {
|
|
throw new Error(response.statusText);
|
|
}
|
|
const data: ArrayBuffer = (await response.data) as ArrayBuffer;
|
|
if (response.data instanceof ArrayBuffer) {
|
|
return unpack(data) as ArrayBuffer;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
// Interceptor for request failure. This interceptor will be entered when the request is wrong.
|
|
// http errors like 401 (unauthorized) are handled either in the methods or AuthenticatedRouting()
|
|
// onError: (error, method) => {
|
|
// alert(error.message);
|
|
// }
|
|
}
|
|
});
|
|
|
|
export const alovaInstanceGH = createAlova({
|
|
baseURL: 'https://api.github.com/repos/emsesp/EMS-ESP32/releases',
|
|
statesHook: ReactHook,
|
|
requestAdapter: xhrRequestAdapter()
|
|
});
|