refreshFirebaseToken function
Refreshes a Firebase ID token using a refresh token.
apiKey is the Firebase API key.
refreshToken is the stored refresh token.
Throws TokenRefreshError if the refresh fails.
Implementation
Future<TokenRefreshResult> refreshFirebaseToken(
String apiKey,
String refreshToken,
) async {
final url = Uri.parse(
'https://securetoken.googleapis.com/v1/token?key=$apiKey',
);
final response = await http.post(
url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: {
'grant_type': 'refresh_token',
'refresh_token': refreshToken,
},
);
if (response.statusCode != 200) {
throw TokenRefreshError(
'Firebase token refresh failed: ${response.statusCode} ${response.body}',
);
}
final data = jsonDecode(response.body) as Map<String, dynamic>;
return TokenRefreshResult(
idToken: data['id_token'] as String,
refreshToken: data['refresh_token'] as String,
expiresIn: int.tryParse(data['expires_in']?.toString() ?? '3600') ?? 3600,
);
}