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 group_id: Option<String>,
49 ) -> Result<Value, ErrorObjectOwned>;
51 #[method(name = "getUserStatus", param_kind = map)]
54 account: Option<String>,
55 recipients: Vec<String>,
56 ) -> Result<Value, ErrorObjectOwned>;
58 #[method(name = "joinGroup", param_kind = map)]
59 fn join_group(&self, account: Option<String>, uri: String) -> Result<Value, ErrorObjectOwned>;
61 #[allow(non_snake_case)]
62 #[method(name = "finishChangeNumber", param_kind = map)]
63 fn finish_change_number(
65 account: Option<String>,
67 verificationCode: String,
69 ) -> Result<Value, ErrorObjectOwned>;
71 #[method(name = "finishLink", param_kind = map)]
74 #[allow(non_snake_case)] deviceLinkUri: String,
75 #[allow(non_snake_case)] deviceName: String,
76 ) -> Result<Value, ErrorObjectOwned>;
78 #[method(name = "listAccounts", param_kind = map)]
79 fn list_accounts(&self) -> Result<Value, ErrorObjectOwned>;
81 #[method(name = "listContacts", param_kind = map)]
84 account: Option<String>,
85 recipients: Vec<String>,
86 #[allow(non_snake_case)] allRecipients: bool,
87 blocked: Option<bool>,
89 ) -> Result<Value, ErrorObjectOwned>;
91 #[method(name = "listDevices", param_kind = map)]
92 fn list_devices(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
94 #[method(name = "listGroups", param_kind = map)]
97 account: Option<String>,
98 #[allow(non_snake_case)] groupIds: Vec<String>,
99 ) -> Result<Value, ErrorObjectOwned>;
101 #[method(name = "listIdentities", param_kind = map)]
104 account: Option<String>,
105 number: Option<String>,
106 ) -> Result<Value, ErrorObjectOwned>;
108 #[method(name = "listStickerPacks", param_kind = map)]
109 fn list_sticker_packs(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
111 #[method(name = "quitGroup", param_kind = map)]
114 account: Option<String>,
115 #[allow(non_snake_case)] groupId: String,
118 ) -> Result<Value, ErrorObjectOwned>;
120 #[method(name = "register", param_kind = map)]
123 account: Option<String>,
125 captcha: Option<String>,
126 ) -> Result<Value, ErrorObjectOwned>;
128 #[method(name = "removeContact", param_kind = map)]
131 account: Option<String>,
135 ) -> Result<Value, ErrorObjectOwned>;
137 #[method(name = "removeDevice", param_kind = map)]
140 account: Option<String>,
141 #[allow(non_snake_case)] deviceId: u32,
142 ) -> Result<Value, ErrorObjectOwned>;
144 #[method(name = "removePin", param_kind = map)]
145 fn remove_pin(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
147 #[method(name = "remoteDelete", param_kind = map)]
150 account: Option<String>,
151 #[allow(non_snake_case)] targetTimestamp: u64,
152 recipients: Vec<String>,
153 #[allow(non_snake_case)] groupIds: Vec<String>,
154 #[allow(non_snake_case)] noteToSelf: bool,
155 ) -> Result<Value, ErrorObjectOwned>;
157 #[allow(non_snake_case)]
158 #[method(name = "send", param_kind = map)]
161 account: Option<String>,
162 recipients: Vec<String>,
163 groupIds: Vec<String>,
167 attachments: Vec<String>,
168 mentions: Vec<String>,
169 textStyle: Vec<String>,
170 quoteTimestamp: Option<u64>,
171 quoteAuthor: Option<String>,
172 quoteMessage: Option<String>,
173 quoteMention: Vec<String>,
174 quoteTextStyle: Vec<String>,
175 quoteAttachment: Vec<String>,
176 preview_url: Option<String>,
177 preview_title: Option<String>,
178 preview_description: Option<String>,
179 preview_image: Option<String>,
180 sticker: Option<String>,
181 storyTimestamp: Option<u64>,
182 storyAuthor: Option<String>,
183 editTimestamp: Option<u64>,
184 ) -> Result<Value, ErrorObjectOwned>;
186 #[method(name = "sendContacts", param_kind = map)]
187 fn send_contacts(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
189 #[method(name = "sendPaymentNotification", param_kind = map)]
190 fn send_payment_notification(
192 account: Option<String>,
196 ) -> Result<Value, ErrorObjectOwned>;
198 #[method(name = "sendReaction", param_kind = map)]
201 account: Option<String>,
202 recipients: Vec<String>,
203 #[allow(non_snake_case)] groupIds: Vec<String>,
204 #[allow(non_snake_case)] noteToSelf: bool,
206 #[allow(non_snake_case)] targetAuthor: String,
207 #[allow(non_snake_case)] targetTimestamp: u64,
210 ) -> Result<Value, ErrorObjectOwned>;
212 #[method(name = "sendReceipt", param_kind = map)]
215 account: Option<String>,
217 #[allow(non_snake_case)] targetTimestamps: Vec<u64>,
219 ) -> Result<Value, ErrorObjectOwned>;
221 #[method(name = "sendSyncRequest", param_kind = map)]
222 fn send_sync_request(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
224 #[method(name = "sendTyping", param_kind = map)]
227 account: Option<String>,
228 recipients: Vec<String>,
229 #[allow(non_snake_case)] groupIds: Vec<String>,
231 ) -> Result<Value, ErrorObjectOwned>;
233 #[method(name = "setPin", param_kind = map)]
234 fn set_pin(&self, account: Option<String>, pin: String) -> Result<Value, ErrorObjectOwned>;
236 #[method(name = "submitRateLimitChallenge", param_kind = map)]
237 fn submit_rate_limit_challenge(
239 account: Option<String>,
242 ) -> Result<Value, ErrorObjectOwned>;
244 #[method(name = "startChangeNumber", param_kind = map)]
245 fn start_change_number(
247 account: Option<String>,
250 captcha: Option<String>,
251 ) -> Result<Value, ErrorObjectOwned>;
253 #[method(name = "startLink", param_kind = map)]
254 fn start_link(&self, account: Option<String>) -> Result<JsonLink, ErrorObjectOwned>;
256 #[method(name = "trust", param_kind = map)]
259 account: Option<String>,
261 #[allow(non_snake_case)] trustAllKnownKeys: bool,
262 #[allow(non_snake_case)] verifiedSafetyNumber: Option<String>,
263 ) -> Result<Value, ErrorObjectOwned>;
265 #[method(name = "unblock", param_kind = map)]
268 account: Option<String>,
269 recipients: Vec<String>,
270 #[allow(non_snake_case)] groupIds: Vec<String>,
271 ) -> Result<Value, ErrorObjectOwned>;
273 #[method(name = "unregister", param_kind = map)]
276 account: Option<String>,
277 #[allow(non_snake_case)] deleteAccount: bool,
278 ) -> Result<Value, ErrorObjectOwned>;
280 #[allow(non_snake_case)]
281 #[method(name = "updateAccount", param_kind = map)]
284 account: Option<String>,
285 deviceName: Option<String>,
286 unrestrictedUnidentifiedSender: Option<bool>,
287 ) -> Result<Value, ErrorObjectOwned>;
289 #[method(name = "updateConfiguration", param_kind = map)]
290 fn update_configuration(
292 account: Option<String>,
293 #[allow(non_snake_case)] readReceipts: Option<bool>,
294 #[allow(non_snake_case)] unidentifiedDeliveryIndicators: Option<bool>,
295 #[allow(non_snake_case)] typingIndicators: Option<bool>,
296 #[allow(non_snake_case)] linkPreviews: Option<bool>,
297 ) -> Result<Value, ErrorObjectOwned>;
299 #[method(name = "updateContact", param_kind = map)]
302 account: Option<String>,
304 name: Option<String>,
305 expiration: Option<u32>,
306 ) -> Result<Value, ErrorObjectOwned>;
308 #[method(name = "updateGroup", param_kind = map)]
311 account: Option<String>,
312 #[allow(non_snake_case)] groupId: Option<String>,
313 name: Option<String>,
314 description: Option<String>,
315 avatar: Option<String>,
317 #[allow(non_snake_case)] removeMember: Vec<String>,
319 #[allow(non_snake_case)] removeAdmin: Vec<String>,
322 #[allow(non_snake_case)] resetLink: bool,
323 #[allow(non_snake_case)] link: Option<String>,
324 #[allow(non_snake_case)] setPermissionAddMember: Option<String>,
325 #[allow(non_snake_case)] setPermissionEditDetails: Option<String>,
326 #[allow(non_snake_case)] setPermissionSendMessages: Option<String>,
327 expiration: Option<u32>,
328 ) -> Result<Value, ErrorObjectOwned>;
330 #[method(name = "updateProfile", param_kind = map)]
333 account: Option<String>,
334 #[allow(non_snake_case)] givenName: Option<String>,
335 #[allow(non_snake_case)] familyName: Option<String>,
336 about: Option<String>,
337 #[allow(non_snake_case)] aboutEmoji: Option<String>,
338 #[allow(non_snake_case)] mobileCoinAddress: Option<String>,
339 avatar: Option<String>,
340 #[allow(non_snake_case)] removeAvatar: bool,
341 ) -> Result<Value, ErrorObjectOwned>;
343 #[method(name = "uploadStickerPack", param_kind = map)]
344 fn upload_sticker_pack(
346 account: Option<String>,
348 ) -> Result<Value, ErrorObjectOwned>;
350 #[method(name = "verify", param_kind = map)]
353 account: Option<String>,
354 #[allow(non_snake_case)] verificationCode: String,
356 ) -> Result<Value, ErrorObjectOwned>;
359 name = "subscribeReceive" => "receive",
360 unsubscribe = "unsubscribeReceive",
364 async fn subscribe_receive(&self, account: Option<String>) -> SubscriptionResult;
366 #[method(name = "version")]
367 fn version(&self) -> Result<Value, ErrorObjectOwned>;
370 #[derive(Deserialize)]
371 #[serde(rename_all = "camelCase")]
372 pub struct JsonLink {
373 pub device_link_uri: String,
376 pub async fn connect_tcp(
377 tcp: impl ToSocketAddrs,
378 ) -> Result<impl SubscriptionClientT, std::io::Error> {
379 let (sender, receiver) = super::transports::tcp::connect(tcp).await?;
381 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
384 pub async fn connect_unix(
385 socket_path: impl AsRef<Path>,
386 ) -> Result<impl SubscriptionClientT, std::io::Error> {
387 let (sender, receiver) = super::transports::ipc::connect(socket_path).await?;
389 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
392 pub async fn connect_http(uri: &str) -> Result<impl SubscriptionClientT, Error> {
393 HttpClientBuilder::default().build(uri)