export type AccessTokenExtensionResult = { token: string | null; authFailed: boolean; }; export interface ApiRuntimeHooks { clearInvalidStudyAndNavigate: () => void | Promise; extendAccessToken: (reason: "response-401") => Promise; forceAuthExpiredLogout: () => void | Promise; } let runtimeHooks: ApiRuntimeHooks | null = null; export const configureApiRuntimeHooks = (hooks: ApiRuntimeHooks): void => { runtimeHooks = hooks; }; export const clearInvalidStudyAndNavigate = async (): Promise => { await runtimeHooks?.clearInvalidStudyAndNavigate(); }; export const extendAccessTokenAfterUnauthorized = (): Promise => runtimeHooks?.extendAccessToken("response-401") ?? Promise.resolve({ token: null, authFailed: false }); export const forceAuthExpiredLogout = async (): Promise => { await runtimeHooks?.forceAuthExpiredLogout(); };