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}