Skip to main content

aiclient_api/auth/
mod.rs

1pub mod copilot;
2pub mod kiro;
3pub mod token_store;
4
5use anyhow::Result;
6use async_trait::async_trait;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "type")]
11pub enum TokenData {
12    #[serde(rename = "copilot")]
13    Copilot {
14        github_token: String,
15        copilot_token: Option<String>,
16        expires_at: Option<i64>,
17    },
18    #[serde(rename = "kiro")]
19    Kiro {
20        access_token: String,
21        refresh_token: String,
22        client_id: Option<String>,
23        client_secret: Option<String>,
24        auth_method: String,
25        region: String,
26        idc_region: Option<String>,
27        start_url: Option<String>,
28        profile_arn: Option<String>,
29        expires_at: i64,
30    },
31}
32
33#[async_trait]
34pub trait TokenStore: Send + Sync {
35    async fn load(&self, provider: &str) -> Result<TokenData>;
36    async fn save(&self, provider: &str, data: &TokenData) -> Result<()>;
37    async fn delete(&self, provider: &str) -> Result<()>;
38    fn is_expired(&self, data: &TokenData) -> bool;
39}