diff --git a/.github/workflows/jsonrpc.yml b/.github/workflows/jsonrpc.yml index cd4107cda..3ead8551c 100644 --- a/.github/workflows/jsonrpc.yml +++ b/.github/workflows/jsonrpc.yml @@ -37,9 +37,6 @@ jobs: run: npm run test env: CHATMAIL_DOMAIN: ${{ vars.CHATMAIL_DOMAIN }} - - name: make sure websocket server version still builds - working-directory: deltachat-jsonrpc - run: cargo build --bin deltachat-jsonrpc-server --features webserver - name: Run linter working-directory: deltachat-jsonrpc/typescript run: npm run prettier:check diff --git a/Cargo.lock b/Cargo.lock index 55cdb6fdd..2c1987df7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,54 +125,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" -[[package]] -name = "anstream" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - [[package]] name = "anstyle" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" -[[package]] -name = "anstyle-parse" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - [[package]] name = "anyhow" version = "1.0.96" @@ -416,64 +374,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "axum" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" -dependencies = [ - "async-trait", - "axum-core", - "base64 0.21.7", - "bytes", - "futures-util", - "http 1.1.0", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sha1", - "sync_wrapper 1.0.0", - "tokio", - "tokio-tungstenite 0.21.0", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.1.0", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 0.1.2", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "backoff" version = "0.4.0" @@ -1015,12 +915,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - [[package]] name = "combine" version = "4.6.7" @@ -1494,11 +1388,9 @@ version = "1.157.2" dependencies = [ "anyhow", "async-channel 2.3.1", - "axum", "base64 0.22.1", "deltachat", "deltachat-contact-tools", - "env_logger", "futures", "log", "num-traits", @@ -1962,29 +1854,6 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "env_filter" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3716d7a920fb4fac5d84e9d4bce8ceb321e9414b4409da61b07b75c1e3d0697" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "jiff", - "log", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -3320,30 +3189,6 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" -[[package]] -name = "jiff" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d699bc6dfc879fb1bf9bdff0d4c56f0884fc6f0d0eb0fba397a6d00cd9a6b85e" -dependencies = [ - "jiff-static", - "log", - "portable-atomic", - "portable-atomic-util", - "serde", -] - -[[package]] -name = "jiff-static" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d16e75759ee0aa64c57a56acbf43916987b20c77373cb7e808979e02b93c9f9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "jni" version = "0.21.1" @@ -3558,12 +3403,6 @@ dependencies = [ "regex-automata 0.1.10", ] -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "md-5" version = "0.10.6" @@ -4543,15 +4382,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - [[package]] name = "portmapper" version = "0.3.1" @@ -5080,7 +4910,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.0", + "sync_wrapper", "tokio", "tokio-rustls", "tokio-util", @@ -5598,16 +5428,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" -dependencies = [ - "itoa", - "serde", -] - [[package]] name = "serde_spanned" version = "0.6.7" @@ -5990,12 +5810,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.0" @@ -6312,18 +6126,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "tokio-tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.21.0", -] - [[package]] name = "tokio-tungstenite" version = "0.24.0" @@ -6333,7 +6135,7 @@ dependencies = [ "futures-util", "log", "tokio", - "tungstenite 0.24.0", + "tungstenite", ] [[package]] @@ -6349,7 +6151,7 @@ dependencies = [ "js-sys", "thiserror 1.0.69", "tokio", - "tokio-tungstenite 0.24.0", + "tokio-tungstenite", "wasm-bindgen", "web-sys", ] @@ -6404,33 +6206,11 @@ dependencies = [ "winnow", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -6511,25 +6291,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.1.0", - "httparse", - "log", - "rand 0.8.5", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - [[package]] name = "tungstenite" version = "0.24.0" @@ -7538,15 +7299,12 @@ dependencies = [ "async-channel 1.9.0", "async-mutex", "async-trait", - "axum", "futures", "futures-util", "log", "schemars", "serde", "serde_json", - "tokio", - "tracing", "typescript-type-def", "yerpc_derive", ] diff --git a/deltachat-jsonrpc/Cargo.toml b/deltachat-jsonrpc/Cargo.toml index 86026ea0b..ef5ce895e 100644 --- a/deltachat-jsonrpc/Cargo.toml +++ b/deltachat-jsonrpc/Cargo.toml @@ -3,15 +3,9 @@ name = "deltachat-jsonrpc" version = "1.157.2" description = "DeltaChat JSON-RPC API" edition = "2021" -default-run = "deltachat-jsonrpc-server" license = "MPL-2.0" repository = "https://github.com/chatmail/core" -[[bin]] -name = "deltachat-jsonrpc-server" -path = "src/webserver.rs" -required-features = ["webserver"] - [dependencies] anyhow = { workspace = true } deltachat = { workspace = true } @@ -31,15 +25,10 @@ sanitize-filename = { workspace = true } walkdir = "2.5.0" base64 = { workspace = true } -# optional dependencies -axum = { version = "0.7", optional = true, features = ["ws"] } -env_logger = { version = "0.11.6", optional = true } - [dev-dependencies] tokio = { workspace = true, features = ["full", "rt-multi-thread"] } [features] default = ["vendored"] -webserver = ["dep:env_logger", "dep:axum", "tokio/full", "yerpc/support-axum"] vendored = ["deltachat/vendored"] diff --git a/deltachat-jsonrpc/README.md b/deltachat-jsonrpc/README.md index 7e8110652..fc02bd496 100644 --- a/deltachat-jsonrpc/README.md +++ b/deltachat-jsonrpc/README.md @@ -4,46 +4,16 @@ This crate provides a [JSON-RPC 2.0](https://www.jsonrpc.org/specification) inte The JSON-RPC API is exposed in two fashions: -* A executable that exposes the JSON-RPC API through a [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) server running on localhost. -* The JSON-RPC API can also be called through the [C FFI](../deltachat-ffi). The C FFI needs to be built with the `jsonrpc` feature. It will then expose the functions `dc_jsonrpc_init`, `dc_jsonrpc_request`, `dc_jsonrpc_next_response` and `dc_jsonrpc_unref`. See the docs in the [header file](../deltachat-ffi/deltachat.h) for details. +* A executable `deltachat-rpc-server` that exposes the JSON-RPC API through stdio. +* The JSON-RPC API can also be called through the [C FFI](../deltachat-ffi). It exposes the functions `dc_jsonrpc_init`, `dc_jsonrpc_request`, `dc_jsonrpc_next_response` and `dc_jsonrpc_unref`. See the docs in the [header file](../deltachat-ffi/deltachat.h) for details. -We also include a JavaScript and TypeScript client for the JSON-RPC API. The source for this is in the [`typescript`](typescript) folder. The client can easily be used with the WebSocket server to build DeltaChat apps for web browsers or Node.js. See the [examples](typescript/example) for details. +We also include a JavaScript and TypeScript client for the JSON-RPC API. The source for this is in the [`typescript`](typescript) folder. ## Usage -#### Running the WebSocket server - -From within this folder, you can start the WebSocket server with the following command: - -```sh -cargo run --features webserver -``` - -If you want to use the server in a production setup, first build it in release mode: - -```sh -cargo build --features webserver --release -``` -You will then find the `deltachat-jsonrpc-server` executable in your `target/release` folder. - -The executable currently does not support any command-line arguments. By default, once started it will accept WebSocket connections on `ws://localhost:20808/ws`. It will store the persistent configuration and databases in a `./accounts` folder relative to the directory from where it is started. - -The server can be configured with environment variables: - -|variable|default|description| -|-|-|-| -|`DC_PORT`|`20808`|port to listen on| -|`DC_ACCOUNTS_PATH`|`./accounts`|path to storage directory| - -If you are targeting other architectures (like KaiOS or Android), the webserver binary can be cross-compiled easily with [rust-cross](https://github.com/cross-rs/cross): - -```sh -cross build --features=webserver --target armv7-linux-androideabi --release -``` - #### Using the TypeScript/JavaScript client -The package includes a JavaScript/TypeScript client which is partially auto-generated through the JSON-RPC library used by this crate ([yerpc](https://github.com/Frando/yerpc/)). Find the source in the [`typescript`](typescript) folder. +The package includes a JavaScript/TypeScript client which is partially auto-generated through the JSON-RPC library used by this crate ([yerpc](https://github.com/chatmail/yerpc)). Find the source in the [`typescript`](typescript) folder. To use it locally, first install the dependencies and compile the TypeScript code to JavaScript: ```sh @@ -52,15 +22,7 @@ npm install npm run build ``` -The JavaScript client is not yet published on NPM (but will likely be soon). Currently, it is recommended to vendor the bundled build. After running `npm run build` as documented above, there will be a file `dist/deltachat.bundle.js`. This is an ESM module containing all dependencies. Copy this file to your project and import the DeltaChat class. - - -```typescript -import { DeltaChat } from './deltachat.bundle.js' -const dc = new DeltaChat('ws://localhost:20808/ws') -const accounts = await dc.rpc.getAllAccounts() -console.log('accounts', accounts) -``` +The JavaScript client is [published on NPM](https://www.npmjs.com/package/@deltachat/jsonrpc-client). A script is included to build autogenerated documentation, which includes all RPC methods: ```sh @@ -73,18 +35,6 @@ Then open the [`typescript/docs`](typescript/docs) folder in a web browser. #### Running the example app -We include a small demo web application that talks to the WebSocket server. It can be used for testing. Feel invited to expand this. - -```sh -cd typescript -npm run build -npm run example:build -npm run example:start -``` -Then, open [`http://localhost:8080/example.html`](http://localhost:8080/example.html) in a web browser. - -Run `npm run example:dev` to live-rebuild the example app when files changes. - ### Testing The crate includes both a basic Rust smoke test and more featureful integration tests that use the TypeScript client. @@ -104,14 +54,12 @@ cd typescript npm run test ``` -This will build the `deltachat-jsonrpc-server` binary and then run a test suite against the WebSocket server. +This will build the `deltachat-jsonrpc-server` binary and then run a test suite. -The test suite includes some tests that need online connectivity and a way to create test email accounts. To run these tests, talk to DeltaChat developers to get a token for the `testrun.org` service, or use a local instance of [`mailadm`](https://github.com/deltachat/docker-mailadm). - -Then, set the `CHATMAIL_DOMAIN` environment variable to your testing email server domain. +The test suite includes some tests that need online connectivity and a way to create test email accounts. To run these tests, set the `CHATMAIL_DOMAIN` environment variable to your testing email server domain. ``` -CHATMAIL_DOMAIN=chat.example.org npm run test +CHATMAIL_DOMAIN=ci-chatmail.testrun.org npm run test ``` #### Test Coverage diff --git a/deltachat-jsonrpc/TODO.md b/deltachat-jsonrpc/TODO.md deleted file mode 100644 index c09079a01..000000000 --- a/deltachat-jsonrpc/TODO.md +++ /dev/null @@ -1,28 +0,0 @@ -# TODO - -- [ ] different test type to simulate two devices: to test autocrypt_initiate_key_transfer & autocrypt_continue_key_transfer - -## MVP - Websocket server&client - -For kaiOS and other experiments, like a deltachat "web" over network from an android phone. - -- [ ] coverage for a majority of the API -- [ ] Blobs served -- [ ] Blob upload (for attachments, setting profile-picture, importing backup and so on) -- [ ] other way blobs can be addressed when using websocket vs. jsonrpc over dc-node -- [ ] Web push API? At least some kind of notification hook closure this lib can accept. - -### Other Ideas for the Websocket server - -- [ ] make sure there can only be one connection at a time to the ws - - why? , it could give problems if its commanded from multiple connections -- [ ] encrypted connection? -- [ ] authenticated connection? -- [ ] Look into unit-testing for the proc macros? -- [ ] proc macro taking over doc comments to generated typescript file - -## Desktop Apis - -Incomplete todo for desktop api porting, just some remainders for points that might need more work: - -- [ ] manual start/stop io functions in the api for context and accounts, so "not syncing all accounts" can still be done in desktop -> webserver should then not do start io on all accounts by default diff --git a/deltachat-jsonrpc/src/webserver.rs b/deltachat-jsonrpc/src/webserver.rs deleted file mode 100644 index 512372c0f..000000000 --- a/deltachat-jsonrpc/src/webserver.rs +++ /dev/null @@ -1,47 +0,0 @@ -#![recursion_limit = "256"] -use std::net::SocketAddr; -use std::path::PathBuf; - -use axum::{extract::ws::WebSocketUpgrade, response::Response, routing::get, Extension, Router}; -use yerpc::axum::handle_ws_rpc; -use yerpc::{RpcClient, RpcSession}; - -mod api; -use api::{Accounts, CommandApi}; - -const DEFAULT_PORT: u16 = 20808; - -#[tokio::main(flavor = "multi_thread")] -async fn main() -> Result<(), std::io::Error> { - env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); - - let path = std::env::var("DC_ACCOUNTS_PATH").unwrap_or_else(|_| "./accounts".to_string()); - let port = std::env::var("DC_PORT") - .map(|port| port.parse::().expect("DC_PORT must be a number")) - .unwrap_or(DEFAULT_PORT); - log::info!("Starting with accounts directory `{path}`."); - let writable = true; - let accounts = Accounts::new(PathBuf::from(&path), writable).await.unwrap(); - let state = CommandApi::new(accounts); - - let app = Router::new() - .route("/ws", get(handler)) - .layer(Extension(state.clone())); - - tokio::spawn(async move { - state.accounts.write().await.start_io().await; - }); - - let addr = SocketAddr::from(([127, 0, 0, 1], port)); - log::info!("JSON-RPC WebSocket server listening on {}", addr); - let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); - axum::serve(listener, app).await.unwrap(); - - Ok(()) -} - -async fn handler(ws: WebSocketUpgrade, Extension(api): Extension) -> Response { - let (client, out_receiver) = RpcClient::new(); - let session = RpcSession::new(client.clone(), api.clone()); - handle_ws_rpc(ws, out_receiver, session).await -} diff --git a/deltachat-jsonrpc/typescript/example.html b/deltachat-jsonrpc/typescript/example.html deleted file mode 100644 index 1f5ca1671..000000000 --- a/deltachat-jsonrpc/typescript/example.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - DeltaChat JSON-RPC example - - - - -

DeltaChat JSON-RPC example

-
- -
-

log

-
-

- Tip: open the dev console and use the client with - window.client -

- - diff --git a/deltachat-jsonrpc/typescript/example/example.ts b/deltachat-jsonrpc/typescript/example/example.ts deleted file mode 100644 index e45bc18cc..000000000 --- a/deltachat-jsonrpc/typescript/example/example.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { DcEvent, DeltaChat } from "../deltachat.js"; - -var SELECTED_ACCOUNT = 0; - -window.addEventListener("DOMContentLoaded", (_event) => { - (window as any).selectDeltaAccount = (id: string) => { - SELECTED_ACCOUNT = Number(id); - window.dispatchEvent(new Event("account-changed")); - }; - console.log("launch run script..."); - run().catch((err) => console.error("run failed", err)); -}); - -async function run() { - const $main = document.getElementById("main")!; - const $side = document.getElementById("side")!; - const $head = document.getElementById("header")!; - - const client = new DeltaChat("ws://localhost:20808/ws"); - - (window as any).client = client.rpc; - - client.on("ALL", (accountId, event) => { - onIncomingEvent(accountId, event); - }); - - window.addEventListener("account-changed", async (_event: Event) => { - listChatsForSelectedAccount(); - }); - - await Promise.all([loadAccountsInHeader(), listChatsForSelectedAccount()]); - - async function loadAccountsInHeader() { - console.log("load accounts"); - const accounts = await client.rpc.getAllAccounts(); - console.log("accounts loaded", accounts); - for (const account of accounts) { - if (account.kind === "Configured") { - write( - $head, - ` - ${account.id}: ${account.addr!} -  ` - ); - } else { - write( - $head, - ` - ${account.id}: (unconfigured) -  ` - ); - } - } - } - - async function listChatsForSelectedAccount() { - clear($main); - const selectedAccount = SELECTED_ACCOUNT; - const info = await client.rpc.getAccountInfo(selectedAccount); - if (info.kind !== "Configured") { - return write($main, "Account is not configured"); - } - write($main, `

${info.addr!}

`); - const chats = await client.rpc.getChatlistEntries( - selectedAccount, - 0, - null, - null - ); - for (const chatId of chats) { - const chat = await client.rpc.getFullChatById(selectedAccount, chatId); - write($main, `

${chat.name}

`); - const messageIds = await client.rpc.getMessageIds( - selectedAccount, - chatId, - false, - false - ); - const messages = await client.rpc.getMessages( - selectedAccount, - messageIds - ); - for (const [_messageId, message] of Object.entries(messages)) { - if (message.kind === "message") write($main, `

${message.text}

`); - else write($main, `

loading error: ${message.error}

`); - } - } - } - - function onIncomingEvent(accountId: number, event: DcEvent) { - write( - $side, - ` -

- [${event.kind} on account ${accountId}]
- f1: ${JSON.stringify( - Object.assign({}, event, { kind: undefined }) - )} -

` - ); - } -} - -function write(el: HTMLElement, html: string) { - el.innerHTML += html; -} -function clear(el: HTMLElement) { - el.innerHTML = ""; -} diff --git a/deltachat-jsonrpc/typescript/example/node-add-account.js b/deltachat-jsonrpc/typescript/example/node-add-account.js deleted file mode 100644 index df47c39c9..000000000 --- a/deltachat-jsonrpc/typescript/example/node-add-account.js +++ /dev/null @@ -1,29 +0,0 @@ -import { DeltaChat } from "../dist/deltachat.js"; - -run().catch(console.error); - -async function run() { - const delta = new DeltaChat("ws://localhost:20808/ws"); - delta.on("event", (event) => { - console.log("event", event.data); - }); - - const email = process.argv[2]; - const password = process.argv[3]; - if (!email || !password) - throw new Error( - "USAGE: node node-add-account.js " - ); - console.log(`creating account for ${email}`); - const id = await delta.rpc.addAccount(); - console.log(`created account id ${id}`); - await delta.rpc.setConfig(id, "addr", email); - await delta.rpc.setConfig(id, "mail_pw", password); - console.log("configuration updated"); - await delta.rpc.configure(id); - console.log("account configured!"); - - const accounts = await delta.rpc.getAllAccounts(); - console.log("accounts", accounts); - console.log("waiting for events..."); -} diff --git a/deltachat-jsonrpc/typescript/example/node-demo.js b/deltachat-jsonrpc/typescript/example/node-demo.js deleted file mode 100644 index 83ea89b3f..000000000 --- a/deltachat-jsonrpc/typescript/example/node-demo.js +++ /dev/null @@ -1,14 +0,0 @@ -import { DeltaChat } from "../dist/deltachat.js"; - -run().catch(console.error); - -async function run() { - const delta = new DeltaChat(); - delta.on("event", (event) => { - console.log("event", event.data); - }); - - const accounts = await delta.rpc.getAllAccounts(); - console.log("accounts", accounts); - console.log("waiting for events..."); -} diff --git a/deltachat-jsonrpc/typescript/package.json b/deltachat-jsonrpc/typescript/package.json index 90417642d..f592ba446 100644 --- a/deltachat-jsonrpc/typescript/package.json +++ b/deltachat-jsonrpc/typescript/package.json @@ -42,10 +42,6 @@ "build:cjs": "esbuild --format=cjs --bundle --packages=external dist/deltachat.js --outfile=dist/deltachat.cjs", "build:tsc": "tsc", "docs": "typedoc --out docs deltachat.ts", - "example": "run-s build example:build example:start", - "example:build": "esbuild --bundle dist/example/example.js --outfile=dist/example.bundle.js", - "example:dev": "esbuild example/example.ts --bundle --outfile=dist/example.bundle.js --servedir=.", - "example:start": "http-server .", "extract-constants": "node ./scripts/generate-constants.js", "generate-bindings": "cargo test", "prettier:check": "prettier --check .", diff --git a/deltachat-jsonrpc/typescript/src/client.ts b/deltachat-jsonrpc/typescript/src/client.ts index 83cc2f7e7..32b86e738 100644 --- a/deltachat-jsonrpc/typescript/src/client.ts +++ b/deltachat-jsonrpc/typescript/src/client.ts @@ -2,7 +2,7 @@ import * as T from "../generated/types.js"; import { EventType } from "../generated/types.js"; import * as RPC from "../generated/jsonrpc.js"; import { RawClient } from "../generated/client.js"; -import { WebsocketTransport, BaseTransport, Request } from "yerpc"; +import { BaseTransport, Request } from "yerpc"; import { TinyEmitter } from "@deltachat/tiny-emitter"; type Events = { ALL: (accountId: number, event: EventType) => void } & { @@ -74,34 +74,6 @@ export class BaseDeltaChat< } } -export type Opts = { - url: string; - startEventLoop: boolean; -}; - -export const DEFAULT_OPTS: Opts = { - url: "ws://localhost:20808/ws", - startEventLoop: true, -}; -export class DeltaChat extends BaseDeltaChat { - opts: Opts; - close() { - this.transport.close(); - } - constructor(opts?: Opts | string) { - if (typeof opts === "string") { - opts = { ...DEFAULT_OPTS, url: opts }; - } else if (opts) { - opts = { ...DEFAULT_OPTS, ...opts }; - } else { - opts = { ...DEFAULT_OPTS }; - } - const transport = new WebsocketTransport(opts.url); - super(transport, opts.startEventLoop); - this.opts = opts; - } -} - export class StdioDeltaChat extends BaseDeltaChat { close() {} constructor(input: any, output: any, startEventLoop: boolean) { diff --git a/deltachat-jsonrpc/typescript/tsconfig.json b/deltachat-jsonrpc/typescript/tsconfig.json index bbb699cf4..70cf3ca0e 100644 --- a/deltachat-jsonrpc/typescript/tsconfig.json +++ b/deltachat-jsonrpc/typescript/tsconfig.json @@ -15,6 +15,6 @@ "noImplicitAny": true, "isolatedModules": true }, - "include": ["*.ts", "example/*.ts", "test/*.ts"], + "include": ["*.ts", "test/*.ts"], "compileOnSave": false } diff --git a/deny.toml b/deny.toml index 9f0af3943..7513102df 100644 --- a/deny.toml +++ b/deny.toml @@ -45,12 +45,9 @@ skip = [ { name = "regex-syntax", version = "0.6.29" }, { name = "rtnetlink", version = "0.13.1" }, { name = "security-framework", version = "2.11.1" }, - { name = "sync_wrapper", version = "0.1.2" }, { name = "syn", version = "1.0.109" }, { name = "thiserror-impl", version = "1.0.69" }, { name = "thiserror", version = "1.0.69" }, - { name = "tokio-tungstenite", version = "0.21.0" }, - { name = "tungstenite", version = "0.21.0" }, { name = "unicode-width", version = "0.1.11" }, { name = "wasi", version = "0.11.0+wasi-snapshot-preview1" }, { name = "windows" },