refreshFirebaseToken function

Future<TokenRefreshResult> refreshFirebaseToken(
  1. String apiKey,
  2. String refreshToken
)

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,
  );
}