Files
homebox/frontend/composables/use-api.ts
Tonya d4e28e6f3b Upgrade frontend deps, including nuxt (#982)
* feat: begin upgrading deps, still very buggy

* feat: progress

* feat: sort all type issues

* fix: sort type issues

* fix: import sonner styles

* fix: nuxt is the enemy

* fix: try sorting issue with workflows

* fix: update vitest config for dynamic import of path and defineConfig

* fix: add missing import

* fix: add time out to try and fix issues

* fix: add ui:ci:preview task for frontend build in CI mode

* fix: i was silly

* feat: add go:ci:with-frontend task for CI mode and remove ui:ci:preview from e2e workflow

* fix: update baseURL in Playwright config for local testing to use port 7745

* fix: update E2E_BASE_URL and remove wait for timeout in login test for smoother execution
2025-09-04 09:00:25 +01:00

50 lines
1.3 KiB
TypeScript

import { PublicApi } from "~~/lib/api/public";
import { UserClient } from "~~/lib/api/user";
import { Requests } from "~~/lib/requests";
export type Observer = {
handler: (r: Response, req?: RequestInit) => void;
};
export type RemoveObserver = () => void;
const observers: Record<string, Observer> = {};
export function defineObserver(key: string, observer: Observer): RemoveObserver {
observers[key] = observer;
return () => {
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
delete observers[key];
};
}
function logger(r: Response) {
console.log(`${r.status} ${r.url} ${r.statusText}`);
}
export function usePublicApi(): PublicApi {
const requests = new Requests("", "", {});
return new PublicApi(requests);
}
export function useUserApi(): UserClient {
const authCtx = useAuthContext();
const requests = new Requests("", "", {});
requests.addResponseInterceptor(logger);
requests.addResponseInterceptor(r => {
if (r.status === 401) {
console.error("unauthorized request, invalidating session");
authCtx.invalidateSession();
navigateTo("/");
}
});
for (const [_, observer] of Object.entries(observers)) {
requests.addResponseInterceptor(observer.handler);
}
return new UserClient(requests, authCtx.attachmentToken || "");
}