mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 21:59:40 +02:00
- Add backendUrl parameter to initializeWebAuth() for interceptor config - Expand isTokenExpiredResponse() to match more error patterns: - "invalid token", "token validation failed", "claim" (jose errors) - ERR_JWT_EXPIRED error code - Update all web apps to pass backendUrl for automatic refresh: - picture (3006), chat (3002), zitare (3007), contacts (3015) - calendar (3014), clock (3017), todo (3018) - Fix API client default port in picture web app This prevents users from being randomly signed out when JWT expires. The interceptor now catches 401 responses and automatically refreshes the token before retrying the request.
121 lines
3.4 KiB
TypeScript
121 lines
3.4 KiB
TypeScript
// Types
|
|
export * from './types';
|
|
|
|
// Core utilities
|
|
import { createAuthService as _createAuthService } from './core/authService';
|
|
export { createAuthService } from './core/authService';
|
|
export type { AuthService } from './core/authService';
|
|
|
|
import { createTokenManager as _createTokenManager } from './core/tokenManager';
|
|
export { createTokenManager } from './core/tokenManager';
|
|
export type { TokenManager, TokenManagerConfig } from './core/tokenManager';
|
|
|
|
export {
|
|
decodeToken,
|
|
isTokenValidLocally,
|
|
isTokenExpired,
|
|
getUserFromToken,
|
|
getTokenExpirationTime,
|
|
getTimeUntilExpiration,
|
|
isB2BUser,
|
|
getB2BInfo,
|
|
shouldDisableRevenueCat,
|
|
getAppSettings,
|
|
} from './core/jwtUtils';
|
|
|
|
// Storage adapter
|
|
import {
|
|
setStorageAdapter as _setStorageAdapter,
|
|
createLocalStorageAdapter as _createLocalStorageAdapter,
|
|
} from './adapters/storage';
|
|
export {
|
|
setStorageAdapter,
|
|
getStorageAdapter,
|
|
isStorageInitialized,
|
|
createLocalStorageAdapter,
|
|
createMemoryStorageAdapter,
|
|
} from './adapters/storage';
|
|
|
|
// Device adapter
|
|
import {
|
|
setDeviceAdapter as _setDeviceAdapter,
|
|
createWebDeviceAdapter as _createWebDeviceAdapter,
|
|
} from './adapters/device';
|
|
export {
|
|
setDeviceAdapter,
|
|
getDeviceAdapter,
|
|
isDeviceInitialized,
|
|
createWebDeviceAdapter,
|
|
} from './adapters/device';
|
|
|
|
// Network adapter
|
|
import {
|
|
setNetworkAdapter as _setNetworkAdapter,
|
|
createWebNetworkAdapter as _createWebNetworkAdapter,
|
|
} from './adapters/network';
|
|
export {
|
|
setNetworkAdapter,
|
|
getNetworkAdapter,
|
|
isDeviceConnected,
|
|
hasStableConnection,
|
|
createWebNetworkAdapter,
|
|
} from './adapters/network';
|
|
|
|
// Fetch interceptor
|
|
import { setupFetchInterceptor as _setupFetchInterceptor } from './interceptors/fetchInterceptor';
|
|
export {
|
|
setupFetchInterceptor,
|
|
setupTokenObservers,
|
|
getInterceptorStatus,
|
|
} from './interceptors/fetchInterceptor';
|
|
export type { FetchInterceptorConfig } from './interceptors/fetchInterceptor';
|
|
|
|
// Contacts client for cross-app integration
|
|
export { ContactsClient, createContactsClient } from './clients/contactsClient';
|
|
export type { ContactsClientConfig, ContactSearchOptions } from './clients/contactsClient';
|
|
|
|
/**
|
|
* Initialize auth service with all adapters for web
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { initializeWebAuth } from '@manacore/shared-auth';
|
|
*
|
|
* // Basic setup (interceptor only for auth URL)
|
|
* const { authService, tokenManager } = initializeWebAuth({
|
|
* baseUrl: 'https://auth.example.com',
|
|
* });
|
|
*
|
|
* // With backend URL (interceptor for both auth and backend - recommended)
|
|
* const { authService, tokenManager } = initializeWebAuth({
|
|
* baseUrl: 'https://auth.example.com',
|
|
* backendUrl: 'https://api.example.com',
|
|
* });
|
|
* ```
|
|
*/
|
|
export function initializeWebAuth(config: {
|
|
baseUrl: string;
|
|
backendUrl?: string;
|
|
storageKeys?: Partial<import('./types').StorageKeys>;
|
|
}) {
|
|
// Set up adapters
|
|
_setStorageAdapter(_createLocalStorageAdapter());
|
|
_setDeviceAdapter(_createWebDeviceAdapter());
|
|
_setNetworkAdapter(_createWebNetworkAdapter());
|
|
|
|
// Create services
|
|
const authService = _createAuthService(config);
|
|
const tokenManager = _createTokenManager(authService);
|
|
|
|
// Set up interceptor for auth URL
|
|
_setupFetchInterceptor(authService, tokenManager);
|
|
|
|
// Set up interceptor for backend URL if provided (for automatic token refresh on 401)
|
|
if (config.backendUrl) {
|
|
_setupFetchInterceptor(authService, tokenManager, {
|
|
backendUrl: config.backendUrl,
|
|
});
|
|
}
|
|
|
|
return { authService, tokenManager };
|
|
}
|