Archived
feat: implement mobile reader
- implement mobile epub reader
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import axios, { type AxiosError, type InternalAxiosRequestConfig } from "axios";
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import type { TokenResponse } from "@cloud-reader/shared";
|
||||
|
||||
const STORAGE_KEYS = {
|
||||
ACCESS_TOKEN: "access_token",
|
||||
@@ -39,6 +40,26 @@ async function clearTokens(): Promise<void> {
|
||||
]);
|
||||
}
|
||||
|
||||
async function saveTokens(tokens: TokenResponse): Promise<void> {
|
||||
await setTokens(tokens.access, tokens.refresh);
|
||||
}
|
||||
|
||||
async function loadTokens(): Promise<TokenResponse | null> {
|
||||
const [access, refresh] = await Promise.all([
|
||||
getAccessToken(),
|
||||
getRefreshToken(),
|
||||
]);
|
||||
if (!access || !refresh) {
|
||||
return null;
|
||||
}
|
||||
return { access, refresh };
|
||||
}
|
||||
|
||||
/** Absolute base URL used for direct (non-axios) requests like file downloads. */
|
||||
function getApiBaseUrl(): string {
|
||||
return api.defaults.baseURL ?? "";
|
||||
}
|
||||
|
||||
// ── Request interceptor ─────────────────────────────────────────────
|
||||
|
||||
api.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {
|
||||
@@ -136,5 +157,14 @@ api.interceptors.response.use(
|
||||
},
|
||||
);
|
||||
|
||||
export { getAccessToken, getRefreshToken, setTokens, clearTokens };
|
||||
const apiClient = api;
|
||||
|
||||
export {
|
||||
apiClient,
|
||||
getAccessToken,
|
||||
saveTokens,
|
||||
loadTokens,
|
||||
clearTokens,
|
||||
getApiBaseUrl,
|
||||
};
|
||||
export default api;
|
||||
Reference in New Issue
Block a user