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 ) -> Result<Value, ErrorObjectOwned>;
75 #[method(name = "joinGroup", param_kind = map)]
76 fn join_group(&self, account: Option<String>, uri: String) -> Result<Value, ErrorObjectOwned>;
78 #[allow(non_snake_case)]
79 #[method(name = "finishChangeNumber", param_kind = map)]
80 fn finish_change_number(
82 account: Option<String>,
84 verificationCode: String,
86 ) -> Result<Value, ErrorObjectOwned>;
88 #[method(name = "finishLink", param_kind = map)]
91 #[allow(non_snake_case)] deviceLinkUri: String,
92 #[allow(non_snake_case)] deviceName: String,
93 ) -> Result<Value, ErrorObjectOwned>;
95 #[method(name = "listAccounts", param_kind = map)]
96 fn list_accounts(&self) -> Result<Value, ErrorObjectOwned>;
98 #[method(name = "listContacts", param_kind = map)]
101 account: Option<String>,
102 recipients: Vec<String>,
103 #[allow(non_snake_case)] allRecipients: bool,
104 blocked: Option<bool>,
105 name: Option<String>,
106 ) -> Result<Value, ErrorObjectOwned>;
108 #[method(name = "listDevices", param_kind = map)]
109 fn list_devices(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
111 #[method(name = "listGroups", param_kind = map)]
114 account: Option<String>,
115 #[allow(non_snake_case)] groupIds: Vec<String>,
116 ) -> Result<Value, ErrorObjectOwned>;
118 #[method(name = "listIdentities", param_kind = map)]
121 account: Option<String>,
122 number: Option<String>,
123 ) -> Result<Value, ErrorObjectOwned>;
125 #[method(name = "listStickerPacks", param_kind = map)]
126 fn list_sticker_packs(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
128 #[method(name = "quitGroup", param_kind = map)]
131 account: Option<String>,
132 #[allow(non_snake_case)] groupId: String,
135 ) -> Result<Value, ErrorObjectOwned>;
137 #[method(name = "register", param_kind = map)]
140 account: Option<String>,
142 captcha: Option<String>,
143 ) -> Result<Value, ErrorObjectOwned>;
145 #[method(name = "removeContact", param_kind = map)]
148 account: Option<String>,
152 ) -> Result<Value, ErrorObjectOwned>;
154 #[method(name = "removeDevice", param_kind = map)]
157 account: Option<String>,
158 #[allow(non_snake_case)] deviceId: u32,
159 ) -> Result<Value, ErrorObjectOwned>;
161 #[method(name = "removePin", param_kind = map)]
162 fn remove_pin(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
164 #[method(name = "remoteDelete", param_kind = map)]
167 account: Option<String>,
168 #[allow(non_snake_case)] targetTimestamp: u64,
169 recipients: Vec<String>,
170 #[allow(non_snake_case)] groupIds: Vec<String>,
171 #[allow(non_snake_case)] noteToSelf: bool,
172 ) -> Result<Value, ErrorObjectOwned>;
174 #[allow(non_snake_case)]
175 #[method(name = "send", param_kind = map)]
178 account: Option<String>,
179 recipients: Vec<String>,
180 groupIds: Vec<String>,
184 attachments: Vec<String>,
185 mentions: Vec<String>,
186 textStyle: Vec<String>,
187 quoteTimestamp: Option<u64>,
188 quoteAuthor: Option<String>,
189 quoteMessage: Option<String>,
190 quoteMention: Vec<String>,
191 quoteTextStyle: Vec<String>,
192 quoteAttachment: Vec<String>,
193 preview_url: Option<String>,
194 preview_title: Option<String>,
195 preview_description: Option<String>,
196 preview_image: Option<String>,
197 sticker: Option<String>,
198 storyTimestamp: Option<u64>,
199 storyAuthor: Option<String>,
200 editTimestamp: Option<u64>,
201 ) -> Result<Value, ErrorObjectOwned>;
203 #[method(name = "sendContacts", param_kind = map)]
204 fn send_contacts(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
206 #[method(name = "sendPaymentNotification", param_kind = map)]
207 fn send_payment_notification(
209 account: Option<String>,
213 ) -> Result<Value, ErrorObjectOwned>;
215 #[method(name = "sendReaction", param_kind = map)]
218 account: Option<String>,
219 recipients: Vec<String>,
220 #[allow(non_snake_case)] groupIds: Vec<String>,
221 #[allow(non_snake_case)] noteToSelf: bool,
223 #[allow(non_snake_case)] targetAuthor: String,
224 #[allow(non_snake_case)] targetTimestamp: u64,
227 ) -> Result<Value, ErrorObjectOwned>;
229 #[method(name = "sendReceipt", param_kind = map)]
232 account: Option<String>,
234 #[allow(non_snake_case)] targetTimestamps: Vec<u64>,
236 ) -> Result<Value, ErrorObjectOwned>;
238 #[method(name = "sendSyncRequest", param_kind = map)]
239 fn send_sync_request(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
241 #[method(name = "sendTyping", param_kind = map)]
244 account: Option<String>,
245 recipients: Vec<String>,
246 #[allow(non_snake_case)] groupIds: Vec<String>,
248 ) -> Result<Value, ErrorObjectOwned>;
250 #[method(name = "setPin", param_kind = map)]
251 fn set_pin(&self, account: Option<String>, pin: String) -> Result<Value, ErrorObjectOwned>;
253 #[method(name = "submitRateLimitChallenge", param_kind = map)]
254 fn submit_rate_limit_challenge(
256 account: Option<String>,
259 ) -> Result<Value, ErrorObjectOwned>;
261 #[method(name = "startChangeNumber", param_kind = map)]
262 fn start_change_number(
264 account: Option<String>,
267 captcha: Option<String>,
268 ) -> Result<Value, ErrorObjectOwned>;
270 #[method(name = "startLink", param_kind = map)]
271 fn start_link(&self, account: Option<String>) -> Result<JsonLink, ErrorObjectOwned>;
273 #[method(name = "trust", param_kind = map)]
276 account: Option<String>,
278 #[allow(non_snake_case)] trustAllKnownKeys: bool,
279 #[allow(non_snake_case)] verifiedSafetyNumber: Option<String>,
280 ) -> Result<Value, ErrorObjectOwned>;
282 #[method(name = "unblock", param_kind = map)]
285 account: Option<String>,
286 recipients: Vec<String>,
287 #[allow(non_snake_case)] groupIds: Vec<String>,
288 ) -> Result<Value, ErrorObjectOwned>;
290 #[method(name = "unregister", param_kind = map)]
293 account: Option<String>,
294 #[allow(non_snake_case)] deleteAccount: bool,
295 ) -> Result<Value, ErrorObjectOwned>;
297 #[allow(non_snake_case)]
298 #[method(name = "updateAccount", param_kind = map)]
301 account: Option<String>,
302 deviceName: Option<String>,
303 unrestrictedUnidentifiedSender: Option<bool>,
304 discoverableByNumber: Option<bool>,
305 numberSharing: Option<bool>,
306 ) -> Result<Value, ErrorObjectOwned>;
308 #[method(name = "updateConfiguration", param_kind = map)]
309 fn update_configuration(
311 account: Option<String>,
312 #[allow(non_snake_case)] readReceipts: Option<bool>,
313 #[allow(non_snake_case)] unidentifiedDeliveryIndicators: Option<bool>,
314 #[allow(non_snake_case)] typingIndicators: Option<bool>,
315 #[allow(non_snake_case)] linkPreviews: Option<bool>,
316 ) -> Result<Value, ErrorObjectOwned>;
318 #[method(name = "updateContact", param_kind = map)]
321 account: Option<String>,
323 name: Option<String>,
324 expiration: Option<u32>,
325 ) -> Result<Value, ErrorObjectOwned>;
327 #[method(name = "updateGroup", param_kind = map)]
330 account: Option<String>,
331 #[allow(non_snake_case)] groupId: Option<String>,
332 name: Option<String>,
333 description: Option<String>,
334 avatar: Option<String>,
336 #[allow(non_snake_case)] removeMember: Vec<String>,
338 #[allow(non_snake_case)] removeAdmin: Vec<String>,
341 #[allow(non_snake_case)] resetLink: bool,
342 #[allow(non_snake_case)] link: Option<String>,
343 #[allow(non_snake_case)] setPermissionAddMember: Option<String>,
344 #[allow(non_snake_case)] setPermissionEditDetails: Option<String>,
345 #[allow(non_snake_case)] setPermissionSendMessages: Option<String>,
346 expiration: Option<u32>,
347 ) -> Result<Value, ErrorObjectOwned>;
349 #[method(name = "updateProfile", param_kind = map)]
352 account: Option<String>,
353 #[allow(non_snake_case)] givenName: Option<String>,
354 #[allow(non_snake_case)] familyName: Option<String>,
355 about: Option<String>,
356 #[allow(non_snake_case)] aboutEmoji: Option<String>,
357 #[allow(non_snake_case)] mobileCoinAddress: Option<String>,
358 avatar: Option<String>,
359 #[allow(non_snake_case)] removeAvatar: bool,
360 ) -> Result<Value, ErrorObjectOwned>;
362 #[method(name = "uploadStickerPack", param_kind = map)]
363 fn upload_sticker_pack(
365 account: Option<String>,
367 ) -> Result<Value, ErrorObjectOwned>;
369 #[method(name = "verify", param_kind = map)]
372 account: Option<String>,
373 #[allow(non_snake_case)] verificationCode: String,
375 ) -> Result<Value, ErrorObjectOwned>;
378 name = "subscribeReceive" => "receive",
379 unsubscribe = "unsubscribeReceive",
383 async fn subscribe_receive(&self, account: Option<String>) -> SubscriptionResult;
385 #[method(name = "version")]
386 fn version(&self) -> Result<Value, ErrorObjectOwned>;
389 #[derive(Deserialize)]
390 #[serde(rename_all = "camelCase")]
391 pub struct JsonLink {
392 pub device_link_uri: String,
395 pub async fn connect_tcp(
396 tcp: impl ToSocketAddrs,
397 ) -> Result<impl SubscriptionClientT, std::io::Error> {
398 let (sender, receiver) = super::transports::tcp::connect(tcp).await?;
400 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
403 pub async fn connect_unix(
404 socket_path: impl AsRef<Path>,
405 ) -> Result<impl SubscriptionClientT, std::io::Error> {
406 let (sender, receiver) = super::transports::ipc::connect(socket_path).await?;
408 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
411 pub async fn connect_http(uri: &str) -> Result<impl SubscriptionClientT, Error> {
412 HttpClientBuilder::default().build(uri)