feat(auth): add pending action queue and api auth wrapper
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import { useLoginDialogStore } from "@/store/login-dialog"
|
||||
|
||||
type RequestExecutor<T> = () => Promise<T>
|
||||
|
||||
interface RequestOptions {
|
||||
onUnauthorized?: () => void
|
||||
}
|
||||
|
||||
export async function requestWithAuth<T>(executor: RequestExecutor<T>, options?: RequestOptions) {
|
||||
try {
|
||||
return await executor()
|
||||
} catch (error) {
|
||||
if (error instanceof Error && error.message === "UNAUTHORIZED") {
|
||||
if (options?.onUnauthorized) {
|
||||
useLoginDialogStore.getState().openLoginDialog(options.onUnauthorized)
|
||||
} else {
|
||||
useLoginDialogStore.getState().openLoginDialog()
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
throw error
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
export { getChatSessionById, listChatMessages, listChatSessions } from "./chat"
|
||||
export { requestWithAuth } from "./client"
|
||||
export { listComments, listCommentsByPost } from "./comments"
|
||||
export { getDisputeByOrderId, listDisputes } from "./disputes"
|
||||
export { isFavorited, listFavorites, listFavoritesByUser } from "./favorites"
|
||||
|
||||
Reference in New Issue
Block a user