1use std::sync::Arc;
4
5use bitwarden_auth::token_management::SecretsManagerTokenHandler;
6pub use bitwarden_core::ClientSettings;
7use bitwarden_core::{OrganizationId, auth::auth_client::AuthClient};
8use bitwarden_generators::GeneratorClientsExt;
9
10use crate::{ProjectsClient, SecretsClient};
11
12#[derive(Clone)]
14pub struct SecretsManagerClient {
15 client: bitwarden_core::Client,
16 token_handler: Arc<SecretsManagerTokenHandler>,
17}
18
19impl SecretsManagerClient {
20 pub fn new(settings: Option<ClientSettings>) -> Self {
22 let token_handler = Arc::new(SecretsManagerTokenHandler::default());
23 Self {
24 client: bitwarden_core::Client::new_with_token_handler(settings, token_handler.clone()),
25 token_handler,
26 }
27 }
28
29 pub fn projects(&self) -> ProjectsClient {
31 ProjectsClient::new(self.clone())
32 }
33
34 pub fn secrets(&self) -> SecretsClient {
36 SecretsClient::new(self.clone())
37 }
38
39 pub fn auth(&self) -> AuthClient {
41 self.client.auth()
42 }
43
44 pub fn generator(&self) -> bitwarden_generators::GeneratorClient {
46 self.client.generator()
47 }
48
49 pub fn get_access_token_organization(&self) -> Option<OrganizationId> {
51 self.token_handler.get_access_token_organization()
52 }
53
54 pub(crate) fn client(&self) -> &bitwarden_core::Client {
55 &self.client
56 }
57}