1use serde::{Deserialize, Serialize};
2
3use crate::{
4 error::{ApiError, check_response},
5 url::FirebaseUrl,
6};
7
8pub async fn refresh_id_token(
9 firebase_url: &FirebaseUrl,
10 refresh_token: &str,
11) -> Result<RefreshIdTokenResponse, ApiError> {
12 let client = reqwest::Client::new();
13
14 let response = client
15 .post(&firebase_url.token_url)
16 .header("Content-Type", "application/json")
17 .json(&Payload {
18 grant_type: "refresh_token",
19 refresh_token,
20 })
21 .send()
22 .await?;
23
24 check_response(response).await
25}
26
27#[derive(Debug, Serialize)]
28struct Payload<'a> {
29 grant_type: &'a str,
30 refresh_token: &'a str,
31}
32
33#[derive(Debug, Serialize, Deserialize)]
34pub struct RefreshIdTokenResponse {
35 pub access_token: String,
36 pub expires_in: String,
37 pub token_type: String,
38 pub refresh_token: String,
39 pub id_token: String,
40 pub user_id: String,
41 pub project_id: String,
42}