/** * Client API pour @ollaid/native-sso * Gestion des requêtes HTTP avec timeout, device ID, token storage * * @version 2.7.9 */ export type ApiErrorType = 'network' | 'timeout' | 'server' | 'validation' | 'auth' | 'unknown'; export declare class ApiError extends Error { type: ApiErrorType; statusCode?: number; errorType?: string; response?: unknown; constructor(message: string, type: ApiErrorType, statusCode?: number, errorType?: string, response?: unknown); } export interface NativeAuthConfig { /** URL du Backend SaaS (pour config et exchange) */ saasApiUrl: string; /** URL du Backend IAM (pour encrypt, init, validate, etc.) */ iamApiUrl: string; /** Timeout en ms (défaut: 30000) */ timeout?: number; /** Mode debug (logs console) */ debug?: boolean; /** Bypass du flux needs_access, déterminé par le backend */ bypass?: boolean; /** * Préfixe de configuration lu côté SaaS pour charger les credentials. * Ne doit pas être envoyé au backend IAM natif. */ configPrefix?: string; /** * Stockage session injectable. * Défaut: storage navigateur chiffré, mémoire en fallback. * Utile pour Capacitor ou des wrappers secure-storage côté app consommatrice. */ storage?: NativeStorageAdapter; } export interface NativeStorageAdapter { getItem(key: string): string | null; setItem(key: string, value: string): void; removeItem(key: string): void; clear(): void; } export declare function setNativeStorage(adapter?: NativeStorageAdapter): void; export declare function getNativeStorage(): NativeStorageAdapter; export declare const setNativeAuthConfig: (newConfig: Partial) => void; export declare const getNativeAuthConfig: () => NativeAuthConfig; export declare const isDebugMode: () => boolean; export declare const getSaasApiBaseUrl: () => string; export declare const getIamApiBaseUrl: () => string; export declare const getDeviceId: () => string; /** * Stable session UUID (instance id) persisted in storage. * * This is NOT a security token. It is used to disambiguate sessions across devices/webviews * and to help backends implement multi-session behavior safely. */ export declare const getSessionUuid: () => string; export interface NativeDeviceContext { deviceName?: string | null; deviceModel?: string | null; deviceManufacturer?: string | null; operatingSystem?: string | null; osVersion?: string | null; platform?: string | null; browser?: string | null; language?: string | null; webviewVersion?: string | null; isNative?: boolean | null; label?: string | null; } export declare function ensureDeviceContext(): Promise; declare const STORAGE: { readonly AUTH_TOKEN: "sso_auth_token"; readonly TOKEN: "sso_token"; readonly USER: "sso_user"; readonly REGISTRATION_MODE: "sso_registration_mode"; readonly ALIAS_REFERENCE: "sso_alias_reference"; readonly REFRESH_TOKEN: "sso_refresh_token"; readonly TOKEN_EXPIRES_AT: "sso_token_expires_at"; readonly REFRESH_EXPIRES_AT: "sso_refresh_expires_at"; }; declare const PROFILE_STORAGE: { readonly IMAGE_LAST_STATUS: "sso_image_last_status"; readonly IMAGE_LAST_CHECK: "sso_image_last_check"; readonly IMAGE_RECHECK_AT: "sso_image_recheck_at"; }; export interface SsoSessionSnapshot { authToken: string | null; refreshToken: string | null; refreshExpiresAt: string | null; tokenExpiresAt: string | null; iamToken: string | null; aliasReference: string | null; accountType: string | null; deviceId: string | null; sessionUuid: string | null; user: TUser | null; } export declare const setAuthToken: (token: string) => void; export declare const getAuthToken: () => string | null; export declare const clearAuthToken: () => void; export interface NativeSsoStorageRepairResult { cleaned: boolean; reason: 'incomplete_session' | 'invalid_user_json' | null; } /** * Nettoyage complet du storage SSO. * * À utiliser quand la session est manifestement corrompue ou incohérente. * Par défaut, on retire aussi les identifiants d'instance (device/session UUID) * pour repartir sur une base totalement saine. */ export declare const clearNativeSsoStorage: (options?: { preserveDeviceIdentity?: boolean; }) => void; /** * Vérifie l'intégrité du storage SSO et purge les états manifestement incohérents. * * Retourne `cleaned=true` si une réparation a été effectuée. * Cette fonction est volontairement conservatrice: elle ne nettoie que les cas * où la session est objectivement inutilisable. */ export declare const repairNativeSsoStorage: () => NativeSsoStorageRepairResult; /** * Déconnexion complète et sécurisée. * * Effectue la double revocation (SaaS + IAM) puis nettoie le storage. * **Toute déconnexion frontend DOIT passer par cette fonction** pour éviter * les sessions orphelines sur l'IAM. * * @example * ```tsx * import { logout } from '@ollaid/native-sso'; * * const handleLogout = async () => { * await logout(); * navigate('/auth/login'); * }; * ``` */ export declare const logout: () => Promise<{ success: boolean; }>; export declare const setAuthUser: (user: unknown) => void; export declare const getAuthUser: () => T | null; export declare const setAccountType: (type: string) => void; export declare const getAccountType: () => string | null; export declare function getSsoSessionSnapshot(): SsoSessionSnapshot; export declare function hasSsoSession(): boolean; export { STORAGE as STORAGE_KEYS }; export { PROFILE_STORAGE as PROFILE_PROMPT_KEYS }; export interface ProfilePromptState { lastStatus: boolean | null; lastCheckAt: number | null; recheckAt: number | null; } export declare function getProfilePromptState(): ProfilePromptState; export declare function setProfilePromptState(status: boolean, recheckAt?: number | null): void; export declare function markProfilePromptComplete(): void; export declare function snoozeProfilePrompt(hours?: number): void; export declare function fetchWithTimeout(url: string, options: RequestInit, timeout: number): Promise; export declare function getHeaders(token?: string, includeConfigPrefix?: boolean): HeadersInit; declare const _default: { getConfig: () => NativeAuthConfig; setConfig: (newConfig: Partial) => void; }; export default _default;