fireblocks_sdk/client/
whitelist.rs1use {
2 super::Client,
3 crate::{
4 WalletContainer,
5 WalletType,
6 apis::{
7 Api,
8 whitelisted_contracts_api::{
9 AddContractAssetParams,
10 CreateContractParams,
11 DeleteContractParams,
12 GetContractParams,
13 },
14 whitelisted_external_wallets_api::{
15 AddAssetToExternalWalletParams,
16 CreateExternalWalletParams,
17 DeleteExternalWalletParams,
18 GetExternalWalletParams,
19 },
20 whitelisted_internal_wallets_api::{
21 CreateInternalWalletAssetParams,
22 CreateInternalWalletParams,
23 DeleteInternalWalletParams,
24 GetInternalWalletParams,
25 },
26 },
27 error::FireblocksError,
28 models::{
29 AddAssetToExternalWalletRequest,
30 BasicAddressRequest,
31 CreateContractRequest,
32 CreateInternalWalletAssetRequest,
33 CreateWalletRequest,
34 },
35 },
36};
37
38impl Client {
39 pub async fn wallet_create_asset(
43 &self,
44 wallet_type: WalletType,
45 id: &str,
46 asset_id: impl Into<String>,
47 address: &str,
48 ) -> crate::Result<String> {
49 let asset_id = asset_id.into();
50 let id: String = match wallet_type {
51 WalletType::External => {
52 let api = self.api_client.whitelisted_external_wallets_api();
53 let params = AddAssetToExternalWalletParams::builder()
54 .asset_id(asset_id)
55 .wallet_id(String::from(id))
56 .add_asset_to_external_wallet_request(
57 AddAssetToExternalWalletRequest::BasicAddressRequest(BasicAddressRequest {
58 address: String::from(address),
59 tag: None,
60 }),
61 )
62 .build();
63 api.add_asset_to_external_wallet(params)
64 .await
65 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
66 .id
67 .unwrap_or_default()
68 }
69 WalletType::Internal => {
70 let api = self.api_client.whitelisted_internal_wallets_api();
71 let a = CreateInternalWalletAssetRequest::new(String::from(address));
72 let params = CreateInternalWalletAssetParams::builder()
73 .asset_id(asset_id)
74 .wallet_id(String::from(id))
75 .create_internal_wallet_asset_request(a)
76 .build();
77 api.create_internal_wallet_asset(params)
78 .await
79 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
80 .id
81 .expect("id to be defined")
82 }
83 WalletType::Contract => {
84 let api = self.api_client.whitelisted_contracts_api();
85 let params = AddContractAssetParams::builder()
86 .asset_id(asset_id)
87 .contract_id(String::from(address))
88 .build();
89 api.add_contract_asset(params)
90 .await
91 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
92 .id
93 .unwrap_or_default()
94 }
95 };
96 Ok(id)
97 }
98
99 pub async fn wallet_delete(&self, wallet_type: WalletType, id: &str) -> crate::Result<()> {
100 match wallet_type {
101 WalletType::External => {
102 let api = self.api_client.whitelisted_external_wallets_api();
103 let params = DeleteExternalWalletParams::builder()
104 .wallet_id(String::from(id))
105 .build();
106 api.delete_external_wallet(params)
107 .await
108 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?;
109 }
110 WalletType::Internal => {
111 let api = self.api_client.whitelisted_internal_wallets_api();
112 let params = DeleteInternalWalletParams::builder()
113 .wallet_id(String::from(id))
114 .build();
115 api.delete_internal_wallet(params)
116 .await
117 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?;
118 }
119 WalletType::Contract => {
120 let api = self.api_client.whitelisted_contracts_api();
121 let params = DeleteContractParams::builder()
122 .contract_id(String::from(id))
123 .build();
124 api.delete_contract(params)
125 .await
126 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?;
127 }
128 }
129 Ok(())
130 }
131
132 pub async fn wallet_create(
133 &self,
134 wallet_type: WalletType,
135 name: &str,
136 ) -> crate::Result<String> {
137 let id: String = match wallet_type {
138 WalletType::External => {
140 let api = self.api_client.whitelisted_external_wallets_api();
141 let params = CreateExternalWalletParams::builder()
142 .create_wallet_request(CreateWalletRequest {
143 name: Some(String::from(name)),
144 customer_ref_id: None,
145 })
146 .build();
147 api.create_external_wallet(params)
148 .await
149 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
150 .id
151 }
152 WalletType::Internal => {
153 let api = self.api_client.whitelisted_internal_wallets_api();
154 let params = CreateInternalWalletParams::builder()
155 .create_wallet_request(CreateWalletRequest {
156 name: Some(String::from(name)),
157 customer_ref_id: None,
158 })
159 .build();
160 api.create_internal_wallet(params)
161 .await
162 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
163 .id
164 }
165 WalletType::Contract => {
166 let api = self.api_client.whitelisted_contracts_api();
167 let params = CreateContractParams::builder()
168 .create_contract_request(CreateContractRequest {
169 name: Some(String::from(name)),
170 })
171 .build();
172 api.create_contract(params)
173 .await
174 .map_err(|e| FireblocksError::FetchWalletCreateError(e.to_string()))?
175 .id
176 }
177 };
178 Ok(id)
179 }
180
181 pub async fn wallet_by_name(
182 &self,
183 wallet_type: WalletType,
184 name: &str,
185 ) -> crate::Result<Option<WalletContainer>> {
186 Ok(self
187 .wallets(wallet_type)
188 .await?
189 .into_iter()
190 .find(|w| w.name == name))
191 }
192
193 pub async fn wallet_by_id(
194 &self,
195 wallet_type: WalletType,
196 id: &str,
197 ) -> crate::Result<WalletContainer> {
198 let w: WalletContainer = match wallet_type {
199 WalletType::External => {
200 let w = self
201 .wallet_external_api()
202 .get_external_wallet(GetExternalWalletParams {
203 wallet_id: String::from(id),
204 })
205 .await
206 .map_err(|e| FireblocksError::FetchWalletError(e.to_string()))?;
207 WalletContainer::from(w)
208 }
209 WalletType::Internal => {
210 let w = self
211 .wallet_internal_api()
212 .get_internal_wallet(GetInternalWalletParams {
213 wallet_id: String::from(id),
214 })
215 .await
216 .map_err(|e| FireblocksError::FetchWalletError(e.to_string()))?;
217 WalletContainer::from(w)
218 }
219 WalletType::Contract => {
220 let w = self
221 .wallet_contract_api()
222 .get_contract(GetContractParams {
223 contract_id: String::from(id),
224 })
225 .await
226 .map_err(|e| FireblocksError::FetchWalletError(e.to_string()))?;
227 WalletContainer::from(w)
228 }
229 };
230 Ok(w)
231 }
232
233 pub async fn wallets(&self, wallet_type: WalletType) -> crate::Result<Vec<WalletContainer>> {
234 let wallets: Vec<WalletContainer> = match wallet_type {
235 WalletType::Internal => {
236 let api = self.api_client.whitelisted_internal_wallets_api();
237 let wallets = api
238 .get_internal_wallets()
239 .await
240 .map_err(|e| FireblocksError::FetchWalletInternalError(e.to_string()))?;
241 wallets.into_iter().map(WalletContainer::from).collect()
242 }
243 WalletType::External => {
244 let api = self.api_client.whitelisted_external_wallets_api();
245 let wallets = api
246 .get_external_wallets()
247 .await
248 .map_err(|e| FireblocksError::FetchWalletExternalError(e.to_string()))?;
249 wallets.into_iter().map(WalletContainer::from).collect()
250 }
251 WalletType::Contract => {
252 let api = self.api_client.whitelisted_contracts_api();
253 let wallets = api
254 .get_contracts()
255 .await
256 .map_err(|e| FireblocksError::FetchWalletContractError(e.to_string()))?;
257 wallets.into_iter().map(WalletContainer::from).collect()
258 }
259 };
260 Ok(wallets)
261 }
262}