/// Keys used for values persisted in [SharedPreferences]. /// /// Centralised here so the auth flow, the network layer and the router all /// agree on the same key. Renaming a key in one place would otherwise silently /// diverge from the others (e.g. the interceptor's defensive logout fallback). class PrefKeys { PrefKeys._(); static const String bearer = 'bearer'; static const String refreshToken = 'refresh_token'; static const String customerData = 'customer_data'; /// Fingerprint (hash of the company's document ids + website) of the last /// profile version we triggered AI onboarding for. Lets us skip redundant /// `POST /api/v1/onboarding` calls until the company's data actually changes. static const String onboardingFingerprint = 'ai_onboarding_fingerprint'; /// Epoch milliseconds when AI onboarding was last started. Used by the /// Recommended tab to show a "still learning" hint for a short grace period. static const String onboardingStartedAt = 'ai_onboarding_started_at'; }