From ed2e14f98e30da39741aedc60a348dce414154e6 Mon Sep 17 00:00:00 2001 From: "Sven (AAMOS AI)" Date: Sat, 15 Aug 2026 19:13:18 +0700 Subject: [PATCH] feat(auth): portable auth provider interface types (AUTH-0) --- apps/mobile/src/lib/auth-provider/types.ts | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 apps/mobile/src/lib/auth-provider/types.ts diff --git a/apps/mobile/src/lib/auth-provider/types.ts b/apps/mobile/src/lib/auth-provider/types.ts new file mode 100644 index 0000000..ddf4270 --- /dev/null +++ b/apps/mobile/src/lib/auth-provider/types.ts @@ -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; + signInWithEmail(email: string, password: string): Promise; + signInWithGoogle(): Promise; + signInWithApple(): Promise; + signOut(): Promise; + /** 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; +}