feat(auth): portable auth provider interface types (AUTH-0)

This commit is contained in:
Sven (AAMOS AI)
2026-08-15 19:13:18 +07:00
parent 92b1ee54c6
commit ed2e14f98e
@@ -0,0 +1,44 @@
/**
* Portabelt autentiseringsgränssnitt.
*
* App-koden (vyer, affärslogik) anropar ENDAST detta gränssnitt aldrig
* Firebase direkt. Firebase blir en implementation (FirebaseAuthProvider); en
* framtida ZitadelAuthProvider ska kunna ersätta den utan att någon vy eller
* affärslogik ändras. ALL leverantörsspecifik import (firebase/*) hålls
* isolerad till implementationsfilen aldrig här, aldrig i en vy.
*/
/** Minimal, leverantörsneutral användarrepresentation. */
export interface AuthUser {
/** Stabil unik identitet från identitetsleverantören (Firebase-UID i dag). */
uid: string;
email: string | null;
emailVerified: boolean;
displayName: string | null;
/** t.ex. "password" | "google.com" | "apple.com". Neutral sträng. */
providerId: string | null;
}
/** Avregistreringsfunktion som returneras av onAuthStateChanged. */
export type Unsubscribe = () => void;
/**
* Enda gränssnittet mot autentisering. Implementeras av FirebaseAuthProvider.
* Alla nätverksmetoder är async och kastar vid fel (fångas i UI-lagret).
*/
export interface AuthProvider {
signUpWithEmail(email: string, password: string): Promise<AuthUser>;
signInWithEmail(email: string, password: string): Promise<AuthUser>;
signInWithGoogle(): Promise<AuthUser>;
signInWithApple(): Promise<AuthUser>;
signOut(): Promise<void>;
/** Nuvarande inloggade användare, eller null. Synkront ögonblicksvärde. */
currentUser(): AuthUser | null;
/** Prenumererar på inloggningsändringar. Returnerar avregistrering. */
onAuthStateChanged(callback: (user: AuthUser | null) => void): Unsubscribe;
/**
* Hämtar aktuell ID-token för backend-verifiering. forceRefresh tvingar
* förnyelse mot leverantören. null om ingen är inloggad.
*/
getIdToken(forceRefresh?: boolean): Promise<string | null>;
}