3 use jsonrpsee::async_client::ClientBuilder;
4 use jsonrpsee::core::client::{Error, SubscriptionClientT};
5 use jsonrpsee::http_client::HttpClientBuilder;
6 use jsonrpsee::proc_macros::rpc;
7 use serde::Deserialize;
9 use tokio::net::ToSocketAddrs;
13 #[method(name = "addDevice", param_kind = map)]
16 account: Option<String>,
18 ) -> Result<Value, ErrorObjectOwned>;
20 #[method(name = "addStickerPack", param_kind = map)]
21 async fn add_sticker_pack(
23 account: Option<String>,
25 ) -> Result<Value, ErrorObjectOwned>;
27 #[method(name = "block", param_kind = map)]
30 account: Option<String>,
31 recipients: Vec<String>,
32 #[allow(non_snake_case)] groupIds: Vec<String>,
33 ) -> Result<Value, ErrorObjectOwned>;
35 #[method(name = "deleteLocalAccountData", param_kind = map)]
36 fn delete_local_account_data(
38 account: Option<String>,
39 #[allow(non_snake_case)] ignoreRegistered: Option<bool>,
40 ) -> Result<Value, ErrorObjectOwned>;
42 #[method(name = "getAttachment", param_kind = map)]
45 account: Option<String>,
47 recipient: Option<String>,
48 #[allow(non_snake_case)] groupId: Option<String>,
49 ) -> Result<Value, ErrorObjectOwned>;
51 #[method(name = "getAvatar", param_kind = map)]
54 account: Option<String>,
55 contact: Option<String>,
56 profile: Option<String>,
57 #[allow(non_snake_case)] groupId: Option<String>,
58 ) -> Result<Value, ErrorObjectOwned>;
60 #[method(name = "getSticker", param_kind = map)]
63 account: Option<String>,
64 #[allow(non_snake_case)] packId: String,
65 #[allow(non_snake_case)] stickerId: u32,
66 ) -> Result<Value, ErrorObjectOwned>;
68 #[method(name = "getUserStatus", param_kind = map)]
71 account: Option<String>,
72 recipients: Vec<String>,
73 usernames: Vec<String>,
74 ) -> Result<Value, ErrorObjectOwned>;
76 #[method(name = "joinGroup", param_kind = map)]
77 fn join_group(&self, account: Option<String>, uri: String) -> Result<Value, ErrorObjectOwned>;
79 #[allow(non_snake_case)]
80 #[method(name = "finishChangeNumber", param_kind = map)]
81 fn finish_change_number(
83 account: Option<String>,
85 verificationCode: String,
87 ) -> Result<Value, ErrorObjectOwned>;
89 #[method(name = "finishLink", param_kind = map)]
92 #[allow(non_snake_case)] deviceLinkUri: String,
93 #[allow(non_snake_case)] deviceName: String,
94 ) -> Result<Value, ErrorObjectOwned>;
96 #[method(name = "listAccounts", param_kind = map)]
97 fn list_accounts(&self) -> Result<Value, ErrorObjectOwned>;
99 #[method(name = "listContacts", param_kind = map)]
102 account: Option<String>,
103 recipients: Vec<String>,
104 #[allow(non_snake_case)] allRecipients: bool,
105 blocked: Option<bool>,
106 name: Option<String>,
107 ) -> Result<Value, ErrorObjectOwned>;
109 #[method(name = "listDevices", param_kind = map)]
110 fn list_devices(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
112 #[method(name = "listGroups", param_kind = map)]
115 account: Option<String>,
116 #[allow(non_snake_case)] groupIds: Vec<String>,
117 ) -> Result<Value, ErrorObjectOwned>;
119 #[method(name = "listIdentities", param_kind = map)]
122 account: Option<String>,
123 number: Option<String>,
124 ) -> Result<Value, ErrorObjectOwned>;
126 #[method(name = "listStickerPacks", param_kind = map)]
127 fn list_sticker_packs(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
129 #[method(name = "quitGroup", param_kind = map)]
132 account: Option<String>,
133 #[allow(non_snake_case)] groupId: String,
136 ) -> Result<Value, ErrorObjectOwned>;
138 #[method(name = "register", param_kind = map)]
141 account: Option<String>,
143 captcha: Option<String>,
144 ) -> Result<Value, ErrorObjectOwned>;
146 #[method(name = "removeContact", param_kind = map)]
149 account: Option<String>,
153 ) -> Result<Value, ErrorObjectOwned>;
155 #[method(name = "removeDevice", param_kind = map)]
158 account: Option<String>,
159 #[allow(non_snake_case)] deviceId: u32,
160 ) -> Result<Value, ErrorObjectOwned>;
162 #[method(name = "removePin", param_kind = map)]
163 fn remove_pin(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
165 #[method(name = "remoteDelete", param_kind = map)]
168 account: Option<String>,
169 #[allow(non_snake_case)] targetTimestamp: u64,
170 recipients: Vec<String>,
171 #[allow(non_snake_case)] groupIds: Vec<String>,
172 #[allow(non_snake_case)] noteToSelf: bool,
173 ) -> Result<Value, ErrorObjectOwned>;
175 #[allow(non_snake_case)]
176 #[method(name = "send", param_kind = map)]
179 account: Option<String>,
180 recipients: Vec<String>,
181 groupIds: Vec<String>,
185 attachments: Vec<String>,
186 mentions: Vec<String>,
187 textStyle: Vec<String>,
188 quoteTimestamp: Option<u64>,
189 quoteAuthor: Option<String>,
190 quoteMessage: Option<String>,
191 quoteMention: Vec<String>,
192 quoteTextStyle: Vec<String>,
193 quoteAttachment: Vec<String>,
194 preview_url: Option<String>,
195 preview_title: Option<String>,
196 preview_description: Option<String>,
197 preview_image: Option<String>,
198 sticker: Option<String>,
199 storyTimestamp: Option<u64>,
200 storyAuthor: Option<String>,
201 editTimestamp: Option<u64>,
202 ) -> Result<Value, ErrorObjectOwned>;
204 #[method(name = "sendContacts", param_kind = map)]
205 fn send_contacts(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
207 #[method(name = "sendPaymentNotification", param_kind = map)]
208 fn send_payment_notification(
210 account: Option<String>,
214 ) -> Result<Value, ErrorObjectOwned>;
216 #[method(name = "sendReaction", param_kind = map)]
219 account: Option<String>,
220 recipients: Vec<String>,
221 #[allow(non_snake_case)] groupIds: Vec<String>,
222 #[allow(non_snake_case)] noteToSelf: bool,
224 #[allow(non_snake_case)] targetAuthor: String,
225 #[allow(non_snake_case)] targetTimestamp: u64,
228 ) -> Result<Value, ErrorObjectOwned>;
230 #[method(name = "sendReceipt", param_kind = map)]
233 account: Option<String>,
235 #[allow(non_snake_case)] targetTimestamps: Vec<u64>,
237 ) -> Result<Value, ErrorObjectOwned>;
239 #[method(name = "sendSyncRequest", param_kind = map)]
240 fn send_sync_request(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
242 #[method(name = "sendTyping", param_kind = map)]
245 account: Option<String>,
246 recipients: Vec<String>,
247 #[allow(non_snake_case)] groupIds: Vec<String>,
249 ) -> Result<Value, ErrorObjectOwned>;
251 #[method(name = "sendMessageRequestResponse", param_kind = map)]
252 fn send_message_request_response(
254 account: Option<String>,
255 recipients: Vec<String>,
256 #[allow(non_snake_case)] groupIds: Vec<String>,
258 ) -> Result<Value, ErrorObjectOwned>;
260 #[method(name = "setPin", param_kind = map)]
261 fn set_pin(&self, account: Option<String>, pin: String) -> Result<Value, ErrorObjectOwned>;
263 #[method(name = "submitRateLimitChallenge", param_kind = map)]
264 fn submit_rate_limit_challenge(
266 account: Option<String>,
269 ) -> Result<Value, ErrorObjectOwned>;
271 #[method(name = "startChangeNumber", param_kind = map)]
272 fn start_change_number(
274 account: Option<String>,
277 captcha: Option<String>,
278 ) -> Result<Value, ErrorObjectOwned>;
280 #[method(name = "startLink", param_kind = map)]
281 fn start_link(&self, account: Option<String>) -> Result<JsonLink, ErrorObjectOwned>;
283 #[method(name = "trust", param_kind = map)]
286 account: Option<String>,
288 #[allow(non_snake_case)] trustAllKnownKeys: bool,
289 #[allow(non_snake_case)] verifiedSafetyNumber: Option<String>,
290 ) -> Result<Value, ErrorObjectOwned>;
292 #[method(name = "unblock", param_kind = map)]
295 account: Option<String>,
296 recipients: Vec<String>,
297 #[allow(non_snake_case)] groupIds: Vec<String>,
298 ) -> Result<Value, ErrorObjectOwned>;
300 #[method(name = "unregister", param_kind = map)]
303 account: Option<String>,
304 #[allow(non_snake_case)] deleteAccount: bool,
305 ) -> Result<Value, ErrorObjectOwned>;
307 #[allow(non_snake_case)]
308 #[method(name = "updateAccount", param_kind = map)]
311 account: Option<String>,
312 deviceName: Option<String>,
313 unrestrictedUnidentifiedSender: Option<bool>,
314 discoverableByNumber: Option<bool>,
315 numberSharing: Option<bool>,
316 ) -> Result<Value, ErrorObjectOwned>;
318 #[method(name = "updateConfiguration", param_kind = map)]
319 fn update_configuration(
321 account: Option<String>,
322 #[allow(non_snake_case)] readReceipts: Option<bool>,
323 #[allow(non_snake_case)] unidentifiedDeliveryIndicators: Option<bool>,
324 #[allow(non_snake_case)] typingIndicators: Option<bool>,
325 #[allow(non_snake_case)] linkPreviews: Option<bool>,
326 ) -> Result<Value, ErrorObjectOwned>;
328 #[method(name = "updateContact", param_kind = map)]
331 account: Option<String>,
333 name: Option<String>,
334 expiration: Option<u32>,
335 ) -> Result<Value, ErrorObjectOwned>;
337 #[method(name = "updateGroup", param_kind = map)]
340 account: Option<String>,
341 #[allow(non_snake_case)] groupId: Option<String>,
342 name: Option<String>,
343 description: Option<String>,
344 avatar: Option<String>,
346 #[allow(non_snake_case)] removeMember: Vec<String>,
348 #[allow(non_snake_case)] removeAdmin: Vec<String>,
351 #[allow(non_snake_case)] resetLink: bool,
352 #[allow(non_snake_case)] link: Option<String>,
353 #[allow(non_snake_case)] setPermissionAddMember: Option<String>,
354 #[allow(non_snake_case)] setPermissionEditDetails: Option<String>,
355 #[allow(non_snake_case)] setPermissionSendMessages: Option<String>,
356 expiration: Option<u32>,
357 ) -> Result<Value, ErrorObjectOwned>;
359 #[method(name = "updateProfile", param_kind = map)]
362 account: Option<String>,
363 #[allow(non_snake_case)] givenName: Option<String>,
364 #[allow(non_snake_case)] familyName: Option<String>,
365 about: Option<String>,
366 #[allow(non_snake_case)] aboutEmoji: Option<String>,
367 #[allow(non_snake_case)] mobileCoinAddress: Option<String>,
368 avatar: Option<String>,
369 #[allow(non_snake_case)] removeAvatar: bool,
370 ) -> Result<Value, ErrorObjectOwned>;
372 #[method(name = "uploadStickerPack", param_kind = map)]
373 fn upload_sticker_pack(
375 account: Option<String>,
377 ) -> Result<Value, ErrorObjectOwned>;
379 #[method(name = "verify", param_kind = map)]
382 account: Option<String>,
383 #[allow(non_snake_case)] verificationCode: String,
385 ) -> Result<Value, ErrorObjectOwned>;
388 name = "subscribeReceive" => "receive",
389 unsubscribe = "unsubscribeReceive",
393 async fn subscribe_receive(&self, account: Option<String>) -> SubscriptionResult;
395 #[method(name = "version")]
396 fn version(&self) -> Result<Value, ErrorObjectOwned>;
399 #[derive(Deserialize)]
400 #[serde(rename_all = "camelCase")]
401 pub struct JsonLink {
402 pub device_link_uri: String,
405 pub async fn connect_tcp(
406 tcp: impl ToSocketAddrs,
407 ) -> Result<impl SubscriptionClientT, std::io::Error> {
408 let (sender, receiver) = super::transports::tcp::connect(tcp).await?;
410 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
414 pub async fn connect_unix(
415 socket_path: impl AsRef<Path>,
416 ) -> Result<impl SubscriptionClientT, std::io::Error> {
417 let (sender, receiver) = super::transports::ipc::connect(socket_path).await?;
419 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
422 pub async fn connect_http(uri: &str) -> Result<impl SubscriptionClientT + use<>, Error> {
423 HttpClientBuilder::default().build(uri)