diff --git a/deltachat-jsonrpc/src/api/mod.rs b/deltachat-jsonrpc/src/api/mod.rs index a54f19e0d..5b8a18b74 100644 --- a/deltachat-jsonrpc/src/api/mod.rs +++ b/deltachat-jsonrpc/src/api/mod.rs @@ -7,7 +7,7 @@ use deltachat::{ context::get_info, message::{Message, MsgId, Viewtype}, provider::get_provider_info, - qr, + qr::{self, Qr}, webxdc::StatusUpdateSerial, }; use std::collections::BTreeMap; @@ -22,6 +22,7 @@ pub mod events; pub mod types; use crate::api::types::chat_list::{get_chat_list_item_by_id, ChatListItemFetchResult}; +use crate::api::types::QrObject; use types::account::Account; use types::chat::FullChat; @@ -202,6 +203,13 @@ impl CommandApi { qr::set_config_from_qr(&ctx, &qr_content).await } + async fn check_qr(&self, account_id: u32, qr_content: String) -> Result { + let ctx = self.get_context(account_id).await?; + let qr = qr::check_qr(&ctx, &qr_content).await?; + let qr_object = QrObject::from(qr); + Ok(qr_object) + } + async fn get_config(&self, account_id: u32, key: String) -> Result> { let ctx = self.get_context(account_id).await?; get_config(&ctx, &key).await diff --git a/deltachat-jsonrpc/src/api/types/mod.rs b/deltachat-jsonrpc/src/api/types/mod.rs index cb9d63f09..578a818a2 100644 --- a/deltachat-jsonrpc/src/api/types/mod.rs +++ b/deltachat-jsonrpc/src/api/types/mod.rs @@ -1,3 +1,7 @@ +use deltachat::qr::Qr; +use serde::Serialize; +use typescript_type_def::TypeDef; + pub mod account; pub mod chat; pub mod chat_list; @@ -17,3 +21,98 @@ fn maybe_empty_string_to_option(string: String) -> Option { Some(string) } } + +#[derive(Serialize, TypeDef)] +#[serde(rename = "Qr", rename_all = "camelCase")] +pub enum QrObject { + AskVerifyContact { + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, + AskVerifyGroup { + grpname: String, + grpid: String, + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, + FprOk { + contact_id: u32, + }, + FprMismatch { + contact_id: Option, + }, + FprWithoutAddr { + fingerprint: String, + }, + Account { + domain: String, + }, + WebrtcInstance { + domain: String, + instance_pattern: String, + }, + Addr { + contact_id: u32, + }, + Url { + url: String, + }, + Text { + text: String, + }, + WithdrawVerifyContact { + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, + WithdrawVerifyGroup { + grpname: String, + grpid: String, + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, + ReviveVerifyContact { + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, + ReviveVerifyGroup { + grpname: String, + grpid: String, + contact_id: u32, + fingerprint: String, + invitenumber: String, + authcode: String, + }, +} + +impl From for QrObject { + fn from(qr: Qr) -> Self { + match qr { + Qr::Account { domain } => { + QrObject::Account { domain } + } + Qr::FprOk { + contact_id, + } => { + let contact_id = contact_id.to_u32(); + QrObject::FprOk { contact_id } + } + Qr::FprWithoutAddr { + fingerprint, + } => { + let fingerprint = fingerprint.to_string(); + QrObject::FprWithoutAddr { fingerprint } + } + _ => todo!() + } + } +} \ No newline at end of file diff --git a/deltachat-jsonrpc/typescript/generated/client.ts b/deltachat-jsonrpc/typescript/generated/client.ts index 5b3fcbeed..c278417da 100644 --- a/deltachat-jsonrpc/typescript/generated/client.ts +++ b/deltachat-jsonrpc/typescript/generated/client.ts @@ -123,6 +123,11 @@ export class RawClient { } + public checkQr(accountId: T.U32, qrContent: string): Promise { + return (this._transport.request('check_qr', [accountId, qrContent] as RPC.Params)) as Promise; + } + + public getConfig(accountId: T.U32, key: string): Promise<(string|null)> { return (this._transport.request('get_config', [accountId, key] as RPC.Params)) as Promise<(string|null)>; } diff --git a/deltachat-jsonrpc/typescript/generated/types.ts b/deltachat-jsonrpc/typescript/generated/types.ts index e923b067d..e8548b91d 100644 --- a/deltachat-jsonrpc/typescript/generated/types.ts +++ b/deltachat-jsonrpc/typescript/generated/types.ts @@ -3,6 +3,7 @@ export type U32=number; export type Account=(({"type":"Configured";}&{"id":U32;"displayName":(string|null);"addr":(string|null);"profileImage":(string|null);"color":string;})|({"type":"Unconfigured";}&{"id":U32;})); export type ProviderInfo={"beforeLoginHint":string;"overviewPage":string;"status":U32;}; +export type Qr=({"askVerifyContact":{"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}|{"askVerifyGroup":{"grpname":string;"grpid":string;"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}|{"fprOk":{"contact_id":U32;};}|{"fprMismatch":{"contact_id":(U32|null);};}|{"fprWithoutAddr":{"fingerprint":string;};}|{"account":{"domain":string;};}|{"webrtcInstance":{"domain":string;"instance_pattern":string;};}|{"addr":{"contact_id":U32;};}|{"url":{"url":string;};}|{"text":{"text":string;};}|{"withdrawVerifyContact":{"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}|{"withdrawVerifyGroup":{"grpname":string;"grpid":string;"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}|{"reviveVerifyContact":{"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}|{"reviveVerifyGroup":{"grpname":string;"grpid":string;"contact_id":U32;"fingerprint":string;"invitenumber":string;"authcode":string;};}); export type Usize=number; export type ChatListEntry=[U32,U32]; export type I64=number; @@ -95,4 +96,4 @@ export type WebxdcMessageInfo={ * Implementations may offer an menu or a button to open this URL. */ "sourceCodeUrl":(string|null);}; -export type __AllTyps=[string,boolean,Record,U32,U32,null,(U32)[],U32,null,(U32|null),(Account)[],U32,Account,U32,string,(ProviderInfo|null),U32,boolean,U32,Record,U32,string,(string|null),null,U32,Record,null,U32,string,null,U32,string,(string|null),U32,(string)[],Record,U32,null,U32,null,U32,(U32)[],U32,U32,Usize,U32,string,U32,U32,string,null,U32,(U32|null),(string|null),(U32|null),(ChatListEntry)[],U32,(ChatListEntry)[],Record,U32,U32,FullChat,U32,U32,null,U32,U32,null,U32,string,string,U32,U32,U32,U32,(U32)[],U32,U32,Message,U32,(U32)[],Record,U32,U32,Contact,U32,string,(string|null),U32,U32,U32,U32,U32,U32,null,U32,U32,null,U32,(Contact)[],U32,U32,(string|null),(U32)[],U32,U32,(string|null),(Contact)[],U32,(U32)[],Record,U32,U32,Viewtype,(Viewtype|null),(Viewtype|null),(U32)[],U32,U32,string,string,null,U32,U32,U32,string,U32,U32,WebxdcMessageInfo,U32,string,U32,U32]; +export type __AllTyps=[string,boolean,Record,U32,U32,null,(U32)[],U32,null,(U32|null),(Account)[],U32,Account,U32,string,(ProviderInfo|null),U32,boolean,U32,Record,U32,string,(string|null),null,U32,Record,null,U32,string,null,U32,string,Qr,U32,string,(string|null),U32,(string)[],Record,U32,null,U32,null,U32,(U32)[],U32,U32,Usize,U32,string,U32,U32,string,null,U32,(U32|null),(string|null),(U32|null),(ChatListEntry)[],U32,(ChatListEntry)[],Record,U32,U32,FullChat,U32,U32,null,U32,U32,null,U32,string,string,U32,U32,U32,U32,(U32)[],U32,U32,Message,U32,(U32)[],Record,U32,U32,Contact,U32,string,(string|null),U32,U32,U32,U32,U32,U32,null,U32,U32,null,U32,(Contact)[],U32,U32,(string|null),(U32)[],U32,U32,(string|null),(Contact)[],U32,(U32)[],Record,U32,U32,Viewtype,(Viewtype|null),(Viewtype|null),(U32)[],U32,U32,string,string,null,U32,U32,U32,string,U32,U32,WebxdcMessageInfo,U32,string,U32,U32];