rainy_sdk/endpoints/
keys.rs

1use crate::client::RainyClient;
2use crate::error::Result;
3use crate::models::ApiKey;
4
5impl RainyClient {
6    /// Create a new API key
7    ///
8    /// This endpoint requires user authentication with a master API key.
9    ///
10    /// # Arguments
11    ///
12    /// * `description` - Description of what this API key will be used for
13    /// * `expires_in_days` - Optional expiration time in days
14    ///
15    /// # Returns
16    ///
17    /// Returns the created API key information.
18    ///
19    /// # Example
20    ///
21    /// ```rust,no_run
22    /// # use rainy_sdk::RainyClient;
23    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
24    /// let client = RainyClient::with_api_key("master-api-key")?;
25    ///
26    /// let api_key = client.create_api_key(
27    ///     "Production API key",
28    ///     Some(365)
29    /// ).await?;
30    ///
31    /// println!("Created API key: {}", api_key.key);
32    /// # Ok(())
33    /// # }
34    /// ```
35    pub async fn create_api_key(
36        &self,
37        description: &str,
38        expires_in_days: Option<u32>,
39    ) -> Result<ApiKey> {
40        let mut body = serde_json::json!({
41            "description": description
42        });
43
44        if let Some(days) = expires_in_days {
45            body["expiresInDays"] = serde_json::json!(days);
46        }
47
48        self.make_request(reqwest::Method::POST, "/keys", Some(body))
49            .await
50    }
51
52    /// List all API keys for the current user
53    ///
54    /// This endpoint requires user authentication.
55    ///
56    /// # Returns
57    ///
58    /// Returns a vector of all API keys owned by the authenticated user.
59    ///
60    /// # Example
61    ///
62    /// ```rust,no_run
63    /// # use rainy_sdk::RainyClient;
64    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
65    /// let client = RainyClient::with_api_key("user-api-key")?;
66    ///
67    /// let keys = client.list_api_keys().await?;
68    /// for key in keys {
69    ///     println!("Key: {} - Active: {}", key.key, key.is_active);
70    /// }
71    /// # Ok(())
72    /// # }
73    /// ```
74    pub async fn list_api_keys(&self) -> Result<Vec<ApiKey>> {
75        #[derive(serde::Deserialize)]
76        struct ApiKeysResponse {
77            api_keys: Vec<ApiKey>,
78        }
79
80        let response: ApiKeysResponse = self
81            .make_request(reqwest::Method::GET, "/users/account", None)
82            .await?;
83
84        Ok(response.api_keys)
85    }
86
87    /// Update an API key
88    ///
89    /// This endpoint requires user authentication.
90    ///
91    /// # Arguments
92    ///
93    /// * `key_id` - The UUID of the API key to update
94    /// * `updates` - JSON object containing the fields to update
95    ///
96    /// # Returns
97    ///
98    /// Returns the updated API key information.
99    ///
100    /// # Example
101    ///
102    /// ```rust,no_run
103    /// # use rainy_sdk::{RainyClient, AuthConfig};
104    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
105    /// use serde_json::json;
106    ///
107    /// let client = RainyClient::with_api_key("user-api-key")?;
108    ///
109    /// let updates = json!({
110    ///     "description": "Updated description"
111    /// });
112    ///
113    /// let updated_key = client.update_api_key(
114    ///     "550e8400-e29b-41d4-a716-446655440000",
115    ///     updates
116    /// ).await?;
117    /// # Ok(())
118    /// # }
119    /// ```
120    pub async fn update_api_key(&self, key_id: &str, updates: serde_json::Value) -> Result<ApiKey> {
121        self.make_request(
122            reqwest::Method::PATCH,
123            &format!("/keys/{key_id}"),
124            Some(updates),
125        )
126        .await
127    }
128
129    /// Delete an API key
130    ///
131    /// This endpoint requires user authentication.
132    ///
133    /// # Arguments
134    ///
135    /// * `key_id` - The UUID of the API key to delete
136    ///
137    /// # Example
138    ///
139    /// ```rust,no_run
140    /// # use rainy_sdk::RainyClient;
141    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
142    /// let client = RainyClient::with_api_key("user-api-key")?;
143    ///
144    /// client.delete_api_key("550e8400-e29b-41d4-a716-446655440000").await?;
145    /// println!("API key deleted successfully");
146    /// # Ok(())
147    /// # }
148    /// ```
149    pub async fn delete_api_key(&self, key_id: &str) -> Result<()> {
150        self.make_request(reqwest::Method::DELETE, &format!("/keys/{key_id}"), None)
151            .await
152    }
153}