1use std::sync::Arc;
2use crate::{
3 auth::OAuthClient,
4 config::HighLevelConfig,
5 http::HttpClient,
6 storage::{memory::MemoryStorage, SessionStorage},
7 apis::{
8 blogs::BlogsApi,
9 businesses::BusinessesApi,
10 calendars::CalendarsApi,
11 campaigns::CampaignsApi,
12 companies::CompaniesApi,
13 contacts::ContactsApi,
14 conversations::ConversationsApi,
15 courses::CoursesApi,
16 custom_fields::CustomFieldsApi,
17 custom_menus::CustomMenusApi,
18 forms::FormsApi,
19 funnels::FunnelsApi,
20 invoices::InvoicesApi,
21 links::LinksApi,
22 locations::LocationsApi,
23 medias::MediasApi,
24 opportunities::OpportunitiesApi,
25 payments::PaymentsApi,
26 pipelines::PipelinesApi,
27 products::ProductsApi,
28 snapshots::SnapshotsApi,
29 social_planner::SocialPlannerApi,
30 surveys::SurveysApi,
31 tags::TagsApi,
32 users::UsersApi,
33 webhooks::WebhooksApi,
34 workflows::WorkflowsApi,
35 },
36};
37
38pub struct HighLevel {
52 pub(crate) http: Arc<HttpClient>,
53 pub(crate) config: Arc<HighLevelConfig>,
54 pub(crate) storage: Arc<dyn SessionStorage>,
55}
56
57impl HighLevel {
58 pub fn new(config: HighLevelConfig) -> Self {
59 Self::with_storage(config, Arc::new(MemoryStorage::new()))
60 }
61
62 pub fn with_storage(config: HighLevelConfig, storage: Arc<dyn SessionStorage>) -> Self {
63 let http = Arc::new(HttpClient::new(&config));
64 Self {
65 http,
66 config: Arc::new(config),
67 storage,
68 }
69 }
70
71 pub async fn set_access_token(&self, token: impl Into<String>) {
73 self.http.set_token(token.into()).await;
74 }
75
76 pub async fn access_token(&self) -> Option<String> {
78 self.http.get_token().await
79 }
80
81 pub fn oauth(&self) -> OAuthClient {
82 OAuthClient::new(self.config.clone(), reqwest::Client::new())
83 }
84
85 pub fn blogs(&self) -> BlogsApi { BlogsApi::new(self.http.clone()) }
88 pub fn businesses(&self) -> BusinessesApi { BusinessesApi::new(self.http.clone()) }
89 pub fn calendars(&self) -> CalendarsApi { CalendarsApi::new(self.http.clone()) }
90 pub fn campaigns(&self) -> CampaignsApi { CampaignsApi::new(self.http.clone()) }
91 pub fn companies(&self) -> CompaniesApi { CompaniesApi::new(self.http.clone()) }
92 pub fn contacts(&self) -> ContactsApi { ContactsApi::new(self.http.clone()) }
93 pub fn conversations(&self) -> ConversationsApi { ConversationsApi::new(self.http.clone()) }
94 pub fn courses(&self) -> CoursesApi { CoursesApi::new(self.http.clone()) }
95 pub fn custom_fields(&self) -> CustomFieldsApi { CustomFieldsApi::new(self.http.clone()) }
96 pub fn custom_menus(&self) -> CustomMenusApi { CustomMenusApi::new(self.http.clone()) }
97 pub fn forms(&self) -> FormsApi { FormsApi::new(self.http.clone()) }
98 pub fn funnels(&self) -> FunnelsApi { FunnelsApi::new(self.http.clone()) }
99 pub fn invoices(&self) -> InvoicesApi { InvoicesApi::new(self.http.clone()) }
100 pub fn links(&self) -> LinksApi { LinksApi::new(self.http.clone()) }
101 pub fn locations(&self) -> LocationsApi { LocationsApi::new(self.http.clone()) }
102 pub fn medias(&self) -> MediasApi { MediasApi::new(self.http.clone()) }
103 pub fn opportunities(&self) -> OpportunitiesApi { OpportunitiesApi::new(self.http.clone()) }
104 pub fn payments(&self) -> PaymentsApi { PaymentsApi::new(self.http.clone()) }
105 pub fn pipelines(&self) -> PipelinesApi { PipelinesApi::new(self.http.clone()) }
106 pub fn products(&self) -> ProductsApi { ProductsApi::new(self.http.clone()) }
107 pub fn snapshots(&self) -> SnapshotsApi { SnapshotsApi::new(self.http.clone()) }
108 pub fn social_planner(&self) -> SocialPlannerApi { SocialPlannerApi::new(self.http.clone()) }
109 pub fn surveys(&self) -> SurveysApi { SurveysApi::new(self.http.clone()) }
110 pub fn tags(&self) -> TagsApi { TagsApi::new(self.http.clone()) }
111 pub fn users(&self) -> UsersApi { UsersApi::new(self.http.clone()) }
112 pub fn webhooks(&self) -> WebhooksApi { WebhooksApi::new(self.http.clone()) }
113 pub fn workflows(&self) -> WorkflowsApi { WorkflowsApi::new(self.http.clone()) }
114}