services/keys_service library

Classes

KeysService
API key CRUD against /v1/auth/api-keys, always authenticated with the caller's stored key — that's what makes the EMAIL_NOT_VERIFIED gate a non-issue, since it only fires on a Firebase-token create. Call-injected Dio (never ApiClient.forKey itself), so tests swap in FakeAdapter the same way test/helpers/auth_fake_routes.dart already does for AuthService. Never calls exit() — every failure is a thrown AuthCliFault and the command decides the exit code and printed line.