添加Apple登录
This commit is contained in:
110
lib/api.ts
110
lib/api.ts
@@ -2,6 +2,8 @@ import { API_CONFIG, API_ENDPOINTS } from "@/constants/api";
|
||||
import {
|
||||
ApiListResponse,
|
||||
ApiResponse,
|
||||
AppleSignInRequest,
|
||||
AppleSignInResponse,
|
||||
Country,
|
||||
H2HData,
|
||||
League,
|
||||
@@ -9,11 +11,15 @@ import {
|
||||
Match,
|
||||
MatchDetailData,
|
||||
OddsData,
|
||||
RefreshTokenRequest,
|
||||
RefreshTokenResponse,
|
||||
SearchResult,
|
||||
Sport,
|
||||
UpcomingMatch,
|
||||
UserProfile,
|
||||
} from "@/types/api";
|
||||
import axios from "axios";
|
||||
import { storage } from "./storage";
|
||||
|
||||
const apiClient = axios.create({
|
||||
baseURL: API_CONFIG.BASE_URL,
|
||||
@@ -23,6 +29,55 @@ const apiClient = axios.create({
|
||||
},
|
||||
});
|
||||
|
||||
apiClient.interceptors.request.use(async (config) => {
|
||||
const token = await storage.getAccessToken();
|
||||
if (token) {
|
||||
config.headers.Authorization = `Bearer ${token}`;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
|
||||
const refreshTokenApi = async (
|
||||
request: RefreshTokenRequest
|
||||
): Promise<RefreshTokenResponse> => {
|
||||
try {
|
||||
const response = await apiClient.post<
|
||||
ApiResponse<RefreshTokenResponse>
|
||||
>(API_ENDPOINTS.REFRESH_TOKEN, request);
|
||||
|
||||
if (response.data.code === 0) {
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
throw new Error(response.data.message);
|
||||
} catch (error) {
|
||||
console.error("Refresh token error:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
apiClient.interceptors.response.use(
|
||||
(response) => response,
|
||||
async (error) => {
|
||||
const originalRequest = error.config;
|
||||
if (error.response?.status === 401 && !originalRequest._retry) {
|
||||
originalRequest._retry = true;
|
||||
try {
|
||||
const refreshTokenValue = await storage.getRefreshToken();
|
||||
if (refreshTokenValue) {
|
||||
const res = await refreshTokenApi({ refreshToken: refreshTokenValue });
|
||||
await storage.setAccessToken(res.accessToken);
|
||||
originalRequest.headers.Authorization = `Bearer ${res.accessToken}`;
|
||||
return apiClient(originalRequest);
|
||||
}
|
||||
} catch {
|
||||
await storage.clear();
|
||||
}
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
export const fetchSports = async (): Promise<Sport[]> => {
|
||||
try {
|
||||
const response = await apiClient.get<ApiResponse<ApiListResponse<Sport>>>(
|
||||
@@ -311,3 +366,58 @@ export const fetchH2H = async (
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const appleSignIn = async (
|
||||
request: AppleSignInRequest
|
||||
): Promise<AppleSignInResponse> => {
|
||||
try {
|
||||
const response = await apiClient.post<
|
||||
ApiResponse<AppleSignInResponse>
|
||||
>(API_ENDPOINTS.APPLE_SIGNIN, request);
|
||||
|
||||
if (response.data.code === 0) {
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
throw new Error(response.data.message);
|
||||
} catch (error) {
|
||||
console.error("Apple sign in error:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const logout = async (): Promise<string> => {
|
||||
try {
|
||||
const response = await apiClient.post<ApiResponse<string>>(
|
||||
API_ENDPOINTS.LOGOUT
|
||||
);
|
||||
|
||||
if (response.data.code === 0) {
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
throw new Error(response.data.message);
|
||||
} catch (error) {
|
||||
console.error("Logout error:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const refreshToken = refreshTokenApi;
|
||||
|
||||
export const fetchUserProfile = async (): Promise<UserProfile> => {
|
||||
try {
|
||||
const response = await apiClient.get<ApiResponse<UserProfile>>(
|
||||
API_ENDPOINTS.USER_PROFILE
|
||||
);
|
||||
|
||||
if (response.data.code === 0) {
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
throw new Error(response.data.message);
|
||||
} catch (error) {
|
||||
console.error("Fetch user profile error:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user