3 use jsonrpsee::async_client::ClientBuilder;
4 use jsonrpsee::core::client::SubscriptionClientT;
5 use jsonrpsee::core::Error;
6 use jsonrpsee::http_client::HttpClientBuilder;
7 use jsonrpsee::proc_macros::rpc;
8 use serde::Deserialize;
10 use tokio::net::ToSocketAddrs;
14 #[method(name = "addDevice", param_kind = map)]
17 account: Option<String>,
19 ) -> Result<Value, ErrorObjectOwned>;
21 #[method(name = "block", param_kind = map)]
24 account: Option<String>,
25 recipients: Vec<String>,
26 #[allow(non_snake_case)] groupIds: Vec<String>,
27 ) -> Result<Value, ErrorObjectOwned>;
29 #[method(name = "deleteLocalAccountData", param_kind = map)]
30 fn delete_local_account_data(
32 account: Option<String>,
33 #[allow(non_snake_case)] ignoreRegistered: Option<bool>,
34 ) -> Result<Value, ErrorObjectOwned>;
36 #[method(name = "getUserStatus", param_kind = map)]
39 account: Option<String>,
40 recipients: Vec<String>,
41 ) -> Result<Value, ErrorObjectOwned>;
43 #[method(name = "joinGroup", param_kind = map)]
44 fn join_group(&self, account: Option<String>, uri: String) -> Result<Value, ErrorObjectOwned>;
46 #[method(name = "finishLink", param_kind = map)]
49 #[allow(non_snake_case)] deviceLinkUri: String,
50 #[allow(non_snake_case)] deviceName: String,
51 ) -> Result<Value, ErrorObjectOwned>;
53 #[method(name = "listAccounts", param_kind = map)]
54 fn list_accounts(&self) -> Result<Value, ErrorObjectOwned>;
56 #[method(name = "listContacts", param_kind = map)]
59 account: Option<String>,
60 recipients: Vec<String>,
61 #[allow(non_snake_case)] allRecipients: bool,
62 blocked: Option<bool>,
64 ) -> Result<Value, ErrorObjectOwned>;
66 #[method(name = "listDevices", param_kind = map)]
67 fn list_devices(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
69 #[method(name = "listGroups", param_kind = map)]
72 account: Option<String>,
73 #[allow(non_snake_case)] groupIds: Vec<String>,
74 ) -> Result<Value, ErrorObjectOwned>;
76 #[method(name = "listIdentities", param_kind = map)]
79 account: Option<String>,
80 number: Option<String>,
81 ) -> Result<Value, ErrorObjectOwned>;
83 #[method(name = "listStickerPacks", param_kind = map)]
84 fn list_sticker_packs(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
86 #[method(name = "quitGroup", param_kind = map)]
89 account: Option<String>,
90 #[allow(non_snake_case)] groupId: String,
93 ) -> Result<Value, ErrorObjectOwned>;
95 #[method(name = "register", param_kind = map)]
98 account: Option<String>,
100 captcha: Option<String>,
101 ) -> Result<Value, ErrorObjectOwned>;
103 #[method(name = "removeContact", param_kind = map)]
106 account: Option<String>,
109 ) -> Result<Value, ErrorObjectOwned>;
111 #[method(name = "removeDevice", param_kind = map)]
114 account: Option<String>,
115 #[allow(non_snake_case)] deviceId: u32,
116 ) -> Result<Value, ErrorObjectOwned>;
118 #[method(name = "removePin", param_kind = map)]
119 fn remove_pin(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
121 #[method(name = "remoteDelete", param_kind = map)]
124 account: Option<String>,
125 #[allow(non_snake_case)] targetTimestamp: u64,
126 recipients: Vec<String>,
127 #[allow(non_snake_case)] groupIds: Vec<String>,
128 #[allow(non_snake_case)] noteToSelf: bool,
129 ) -> Result<Value, ErrorObjectOwned>;
131 #[method(name = "send", param_kind = map)]
134 account: Option<String>,
135 recipients: Vec<String>,
136 #[allow(non_snake_case)] groupIds: Vec<String>,
137 #[allow(non_snake_case)] noteToSelf: bool,
138 #[allow(non_snake_case)] endSession: bool,
140 attachments: Vec<String>,
141 mentions: Vec<String>,
142 #[allow(non_snake_case)] quoteTimestamp: Option<u64>,
143 #[allow(non_snake_case)] quoteAuthor: Option<String>,
144 #[allow(non_snake_case)] quoteMessage: Option<String>,
145 #[allow(non_snake_case)] quoteMention: Vec<String>,
146 sticker: Option<String>,
147 #[allow(non_snake_case)] storyTimestamp: Option<u64>,
148 #[allow(non_snake_case)] storyAuthor: Option<String>,
149 ) -> Result<Value, ErrorObjectOwned>;
151 #[method(name = "sendContacts", param_kind = map)]
152 fn send_contacts(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
154 #[method(name = "sendPaymentNotification", param_kind = map)]
155 fn send_payment_notification(
157 account: Option<String>,
161 ) -> Result<Value, ErrorObjectOwned>;
163 #[method(name = "sendReaction", param_kind = map)]
166 account: Option<String>,
167 recipients: Vec<String>,
168 #[allow(non_snake_case)] groupIds: Vec<String>,
169 #[allow(non_snake_case)] noteToSelf: bool,
171 #[allow(non_snake_case)] targetAuthor: String,
172 #[allow(non_snake_case)] targetTimestamp: u64,
175 ) -> Result<Value, ErrorObjectOwned>;
177 #[method(name = "sendReceipt", param_kind = map)]
180 account: Option<String>,
182 #[allow(non_snake_case)] targetTimestamps: Vec<u64>,
184 ) -> Result<Value, ErrorObjectOwned>;
186 #[method(name = "sendSyncRequest", param_kind = map)]
187 fn send_sync_request(&self, account: Option<String>) -> Result<Value, ErrorObjectOwned>;
189 #[method(name = "sendTyping", param_kind = map)]
192 account: Option<String>,
193 recipients: Vec<String>,
194 #[allow(non_snake_case)] groupIds: Vec<String>,
196 ) -> Result<Value, ErrorObjectOwned>;
198 #[method(name = "setPin", param_kind = map)]
199 fn set_pin(&self, account: Option<String>, pin: String) -> Result<Value, ErrorObjectOwned>;
201 #[method(name = "submitRateLimitChallenge", param_kind = map)]
202 fn submit_rate_limit_challenge(
204 account: Option<String>,
207 ) -> Result<Value, ErrorObjectOwned>;
209 #[method(name = "startLink", param_kind = map)]
210 fn start_link(&self, account: Option<String>) -> Result<JsonLink, ErrorObjectOwned>;
212 #[method(name = "trust", param_kind = map)]
215 account: Option<String>,
217 #[allow(non_snake_case)] trustAllKnownKeys: bool,
218 #[allow(non_snake_case)] verifiedSafetyNumber: Option<String>,
219 ) -> Result<Value, ErrorObjectOwned>;
221 #[method(name = "unblock", param_kind = map)]
224 account: Option<String>,
225 recipients: Vec<String>,
226 #[allow(non_snake_case)] groupIds: Vec<String>,
227 ) -> Result<Value, ErrorObjectOwned>;
229 #[method(name = "unregister", param_kind = map)]
232 account: Option<String>,
233 #[allow(non_snake_case)] deleteAccount: bool,
234 ) -> Result<Value, ErrorObjectOwned>;
236 #[method(name = "updateAccount", param_kind = map)]
239 account: Option<String>,
240 #[allow(non_snake_case)] deviceName: Option<String>,
241 ) -> Result<Value, ErrorObjectOwned>;
243 #[method(name = "updateConfiguration", param_kind = map)]
244 fn update_configuration(
246 account: Option<String>,
247 #[allow(non_snake_case)] readReceiptes: Option<bool>,
248 #[allow(non_snake_case)] unidentifiedDeliveryIndicators: Option<bool>,
249 #[allow(non_snake_case)] typingIndicators: Option<bool>,
250 #[allow(non_snake_case)] linkPreviews: Option<bool>,
251 ) -> Result<Value, ErrorObjectOwned>;
253 #[method(name = "updateContact", param_kind = map)]
256 account: Option<String>,
258 name: Option<String>,
259 expiration: Option<u32>,
260 ) -> Result<Value, ErrorObjectOwned>;
262 #[method(name = "updateGroup", param_kind = map)]
265 account: Option<String>,
266 #[allow(non_snake_case)] groupId: Option<String>,
267 name: Option<String>,
268 description: Option<String>,
269 avatar: Option<String>,
271 #[allow(non_snake_case)] removeMember: Vec<String>,
273 #[allow(non_snake_case)] removeAdmin: Vec<String>,
276 #[allow(non_snake_case)] resetLink: bool,
277 #[allow(non_snake_case)] link: Option<String>,
278 #[allow(non_snake_case)] setPermissionAddMember: Option<String>,
279 #[allow(non_snake_case)] setPermissionEditDetails: Option<String>,
280 #[allow(non_snake_case)] setPermissionSendMessages: Option<String>,
281 expiration: Option<u32>,
282 ) -> Result<Value, ErrorObjectOwned>;
284 #[method(name = "updateProfile", param_kind = map)]
287 account: Option<String>,
288 #[allow(non_snake_case)] givenName: Option<String>,
289 #[allow(non_snake_case)] familyName: Option<String>,
290 about: Option<String>,
291 #[allow(non_snake_case)] aboutEmoji: Option<String>,
292 #[allow(non_snake_case)] mobileCoinAddress: Option<String>,
293 avatar: Option<String>,
294 #[allow(non_snake_case)] removeAvatar: bool,
295 ) -> Result<Value, ErrorObjectOwned>;
297 #[method(name = "uploadStickerPack", param_kind = map)]
298 fn upload_sticker_pack(
300 account: Option<String>,
302 ) -> Result<Value, ErrorObjectOwned>;
304 #[method(name = "verify", param_kind = map)]
307 account: Option<String>,
308 #[allow(non_snake_case)] verificationCode: String,
310 ) -> Result<Value, ErrorObjectOwned>;
313 name = "subscribeReceive" => "receive",
314 unsubscribe = "unsubscribeReceive",
318 async fn subscribe_receive(&self, account: Option<String>) -> SubscriptionResult;
320 #[method(name = "version")]
321 fn version(&self) -> Result<Value, ErrorObjectOwned>;
324 #[derive(Deserialize)]
325 #[serde(rename_all = "camelCase")]
326 pub struct JsonLink {
327 pub device_link_uri: String,
330 pub async fn connect_tcp(tcp: impl ToSocketAddrs) -> Result<impl SubscriptionClientT, Error> {
331 let (sender, receiver) = super::transports::tcp::connect(tcp).await?;
333 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
336 pub async fn connect_unix(
337 socket_path: impl AsRef<Path>,
338 ) -> Result<impl SubscriptionClientT, Error> {
339 let (sender, receiver) = super::transports::ipc::connect(socket_path).await?;
341 Ok(ClientBuilder::default().build_with_tokio(sender, receiver))
344 pub async fn connect_http(uri: &str) -> Result<impl SubscriptionClientT, Error> {
345 HttpClientBuilder::default().build(uri)