firebase_user/
token.rs

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}