import 'package:pocketbase/pocketbase.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Configuration de connexion au backend PocketBase (LE MÊME que l'app magasin). /// /// L'URL pointe vers l'instance PocketBase auto-hébergée. La session (token /// d'auth) est persistée localement via [SharedPreferences] pour rester /// connecté entre deux lancements de l'app. class PbConfig { PbConfig._(); static const String url = 'https://db.tailb756e1.ts.net'; static bool get estConfigure => !url.contains('VOTRE-URL'); } /// ID client OAuth « Web » du projet Google Cloud. Passé à google_sign_in comme /// `serverClientId` → l'ID token renvoyé a cette audience, que le hook serveur /// PocketBase (`/api/google-native-auth`) vérifie. const String googleWebClientId = '831733439319-45cergb7cf8r728fja4m0kcvu2r7fbj9.apps.googleusercontent.com'; /// Client PocketBase global (initialisé une fois via [initPocketBase]). late final PocketBase pb; /// Initialise le client PocketBase avec une auth store persistée sur disque. /// À appeler au démarrage, avant `runApp`. Future initPocketBase() async { final prefs = await SharedPreferences.getInstance(); final store = AsyncAuthStore( save: (String data) async => prefs.setString('pb_auth', data), clear: () async => prefs.remove('pb_auth'), initial: prefs.getString('pb_auth'), ); pb = PocketBase(PbConfig.url, authStore: store); } /// Extrait un message lisible d'une erreur PocketBase (sinon [parDefaut]). String messageErreurPb(ClientException e, String parDefaut) { final data = e.response['message']; if (data is String && data.trim().isNotEmpty) return data; return parDefaut; }