- app/components/MyLayout.tsx / app/components/home/HomePageTopBar.tsx / app/routes/profile._index.tsx: the BadgeCounts type was declared with snake_case fields (order_updates, seller_orders) while the API's global camelCase renderer sends orderUpdates / sellerOrders on the wire — every read went to undefined, so the "buyer activity" dot on the profile icon and the order-badge on the store dashboard were silently stuck at 0. Fixed by renaming the interface to match the wire and adding sellerChat (per-store roll-up) so the store dashboard sidebar reads badges.sellerChat[storeId] instead of the buyer-side chat count. - app/hooks/useBadgeCounts.ts: interface + EMPTY constant updated to camelCase + new sellerChat map. - app/utils/api-error-handler.ts: 403 no longer force-redirects to /logout. It used to force-log-out on ANY 403/401, so an approved-but-unbadged owner (Ehsan / Noelabel) whose store dashboard fired the Instagram-tab query got a 403 → forced logout → the store page vanished mid-load and the seller landed on the home screen convinced they'd been kicked off their own store. Only 401 signs the session out now. - app/components/store/StorePushPromptCard.tsx: new dashboard-level card that nudges the store owner/staff to enable browser push. Unlike the global buyer banner it's not dismissible-forever; "بعداً یادآوری کن" hides for 24h and it comes back until the user actually subscribes. Handles the permission="denied" path with an in-browser-settings hint. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
32 lines
937 B
TypeScript
32 lines
937 B
TypeScript
/**
|
|
* API Error Handler Middleware
|
|
*
|
|
* Logs the user out on 401 (auth is invalid). Does NOT log out on 403 —
|
|
* that's an authorization/permission failure for an authenticated user
|
|
* (e.g. a seller endpoint that requires `is_verified`), so kicking the
|
|
* session out is wrong and used to silently sign users out of their own
|
|
* store dashboard.
|
|
*/
|
|
|
|
import type { Middleware } from "../../src/api/types/runtime";
|
|
|
|
export const createAuthErrorMiddleware = (): Middleware => ({
|
|
post: async (context) => {
|
|
const response = context.response;
|
|
|
|
if (response.status === 401) {
|
|
console.warn("[API Error Handler] 401 Unauthorized — logging out user");
|
|
if (typeof window !== "undefined") {
|
|
window.location.href = "/logout";
|
|
}
|
|
}
|
|
|
|
return response;
|
|
},
|
|
|
|
onError: async (context) => {
|
|
console.error("[API Error Handler] Request failed:", context.error);
|
|
return context.response;
|
|
},
|
|
});
|