exchangeForControlPlaneToken function
Exchanges a Firebase ID token for a Control Plane JWT.
firebaseToken is the Firebase ID token.
controlPlaneUrl is the Control Plane API URL (optional).
Returns null if the exchange fails (non-critical).
Implementation
Future<({String token, int expiresAt})?> exchangeForControlPlaneToken(
String firebaseToken, {
String? controlPlaneUrl,
}) async {
final baseUrl = controlPlaneUrl ?? getControlPlaneUrl();
final url = Uri.parse('$baseUrl/api/control-plane/token');
try {
final response = await http.post(
url,
headers: {'Authorization': 'Bearer $firebaseToken'},
).timeout(const Duration(seconds: 10));
if (response.statusCode != 200) {
return null;
}
final data = jsonDecode(response.body) as Map<String, dynamic>;
return (
token: data['token'] as String,
expiresAt: (data['expires_at'] as num).toInt(),
);
} catch (_) {
// CP exchange failure is non-critical
return null;
}
}