From 49bdc67175aefe2d8bfbe336c7ec65e4dc2febad Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 13:32:52 +0300 Subject: [PATCH 01/13] feat: add js api crate and implement two order queries --- Cargo.lock | 18 +++++++++++++++++ Cargo.toml | 3 +++ crates/js_api/Cargo.toml | 25 +++++++++++++++++++++++ crates/js_api/src/lib.rs | 2 ++ crates/js_api/src/order.rs | 41 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 crates/js_api/Cargo.toml create mode 100644 crates/js_api/src/lib.rs create mode 100644 crates/js_api/src/order.rs diff --git a/Cargo.lock b/Cargo.lock index a299e17d2..46975497d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6415,6 +6415,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "rain_orderbook_js_api" +version = "0.0.0-alpha.0" +dependencies = [ + "cynic", + "js-sys", + "rain_orderbook_bindings", + "rain_orderbook_subgraph_client", + "reqwest 0.12.5", + "serde", + "serde-wasm-bindgen 0.6.5", + "tokio", + "tsify", + "wasm-bindgen", + "wasm-bindgen-futures", +] + [[package]] name = "rain_orderbook_quote" version = "0.0.0-alpha.0" @@ -6470,6 +6487,7 @@ dependencies = [ "tokio", "tsify", "typeshare", + "url", "wasm-bindgen", ] diff --git a/Cargo.toml b/Cargo.toml index 364e435cc..f25dd278a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,5 +72,8 @@ path = "crates/settings" [workspace.dependencies.rain_orderbook_quote] path = "crates/quote" +[workspace.dependencies.rain_orderbook_js_api] +path = "crates/js_api" + [workspace.dependencies.rain_orderbook_test_fixtures] path = "crates/test_fixtures" \ No newline at end of file diff --git a/crates/js_api/Cargo.toml b/crates/js_api/Cargo.toml new file mode 100644 index 000000000..1a2789784 --- /dev/null +++ b/crates/js_api/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "rain_orderbook_js_api" +description = "Javascript bindings for common functions accross the app." +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true + +[lib] +crate-type = ["rlib", "cdylib"] + +[dependencies] +cynic = { workspace = true } +reqwest = { workspace = true } +rain_orderbook_bindings = { workspace = true } +rain_orderbook_subgraph_client = { workspace = true } +serde = { workspace = true } + +[target.'cfg(target_family = "wasm")'.dependencies] +js-sys = { version = "0.3.69" } +wasm-bindgen = { version = "0.2.92" } +serde-wasm-bindgen = { version = "0.6.5" } +wasm-bindgen-futures = { version = "0.4.42" } +tsify = { version = "0.4.5", default-features = false, features = ["js", "wasm-bindgen"] } +tokio = { workspace = true, features = ["sync", "macros", "io-util", "rt", "time"] } \ No newline at end of file diff --git a/crates/js_api/src/lib.rs b/crates/js_api/src/lib.rs new file mode 100644 index 000000000..46f5ce8c0 --- /dev/null +++ b/crates/js_api/src/lib.rs @@ -0,0 +1,2 @@ +#[cfg(target_family = "wasm")] +pub mod order; diff --git a/crates/js_api/src/order.rs b/crates/js_api/src/order.rs new file mode 100644 index 000000000..e7266aafa --- /dev/null +++ b/crates/js_api/src/order.rs @@ -0,0 +1,41 @@ +use cynic::Id; +use rain_orderbook_bindings::impl_wasm_traits; +use rain_orderbook_subgraph_client::{ + types::common::OrdersListFilterArgs, MultiOrderbookSubgraphClient, MultiSubgraphArgs, + OrderbookSubgraphClient, OrderbookSubgraphClientError, PaginationArgs, +}; +use reqwest::Url; +use serde::{Deserialize, Serialize}; +use serde_wasm_bindgen::{from_value, to_value}; +use tsify::Tsify; +use wasm_bindgen::prelude::*; +use wasm_bindgen::{ + convert::{ + js_value_vector_from_abi, js_value_vector_into_abi, FromWasmAbi, IntoWasmAbi, + LongRefFromWasmAbi, RefFromWasmAbi, TryFromJsValue, VectorFromWasmAbi, VectorIntoWasmAbi, + }, + describe::{inform, WasmDescribe, WasmDescribeVector, VECTOR}, + JsValue, UnwrapThrowExt, +}; + +/// Fetch all orders from multiple subgraphs +/// Returns a list of OrderWithSubgraphName structs +#[wasm_bindgen(js_name = "getOrders")] +pub async fn get_orders( + subgraphs: Vec, + filter_args: OrdersListFilterArgs, + pagination_args: PaginationArgs, +) -> Result { + let client = MultiOrderbookSubgraphClient::new(subgraphs); + let orders = client.orders_list(filter_args, pagination_args).await?; + Ok(to_value(&orders)?) +} + +/// Fetch a single order +/// Returns the Order struct +#[wasm_bindgen(js_name = "getOrder")] +pub async fn get_order(url: &str, id: &str) -> Result { + let client = OrderbookSubgraphClient::new(Url::parse(url)?); + let order = client.order_detail(Id::new(id)).await?; + Ok(to_value(&order)?) +} From 81d28e7df01aaab9a9896cf0d0a30a26d8427b1c Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 13:33:28 +0300 Subject: [PATCH 02/13] feat: implement wasm traits for used structs --- crates/subgraph/Cargo.toml | 1 + crates/subgraph/src/multi_orderbook_client.rs | 16 ++++++++++++++-- crates/subgraph/src/orderbook_client.rs | 13 +++++++++++++ crates/subgraph/src/pagination.rs | 6 +++++- crates/subgraph/src/types/common.rs | 8 ++++++-- tauri-app/src-tauri/Cargo.lock | 1 + 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/crates/subgraph/Cargo.toml b/crates/subgraph/Cargo.toml index 7762358c0..d5758b98e 100644 --- a/crates/subgraph/Cargo.toml +++ b/crates/subgraph/Cargo.toml @@ -18,6 +18,7 @@ serde_json = { workspace = true } alloy = { workspace = true, features = ["rand"] } rain_orderbook_bindings = { workspace = true } chrono = { workspace = true } +url = { workspace = true } cynic-introspection = "3.7.3" futures = "0.3.17" tsify = { version = "0.4.5", default-features = false, features = ["js", "wasm-bindgen"] } diff --git a/crates/subgraph/src/multi_orderbook_client.rs b/crates/subgraph/src/multi_orderbook_client.rs index 1a1463bca..a5db692f1 100644 --- a/crates/subgraph/src/multi_orderbook_client.rs +++ b/crates/subgraph/src/multi_orderbook_client.rs @@ -1,6 +1,15 @@ use futures::future::join_all; +use rain_orderbook_bindings::impl_wasm_traits; use reqwest::Url; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; +use serde_wasm_bindgen::{from_value, to_value}; +use tsify::Tsify; +use wasm_bindgen::convert::{ + js_value_vector_from_abi, js_value_vector_into_abi, FromWasmAbi, IntoWasmAbi, + LongRefFromWasmAbi, RefFromWasmAbi, TryFromJsValue, VectorFromWasmAbi, VectorIntoWasmAbi, +}; +use wasm_bindgen::describe::{inform, WasmDescribe, WasmDescribeVector, VECTOR}; +use wasm_bindgen::{JsValue, UnwrapThrowExt}; use crate::{ types::common::{ @@ -9,11 +18,14 @@ use crate::{ OrderbookSubgraphClient, OrderbookSubgraphClientError, PaginationArgs, }; -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] pub struct MultiSubgraphArgs { + #[tsify(type = "string")] url: Url, name: String, } +impl_wasm_traits!(MultiSubgraphArgs); pub struct MultiOrderbookSubgraphClient { subgraphs: Vec, diff --git a/crates/subgraph/src/orderbook_client.rs b/crates/subgraph/src/orderbook_client.rs index 4663f8ce7..73f58d3ac 100644 --- a/crates/subgraph/src/orderbook_client.rs +++ b/crates/subgraph/src/orderbook_client.rs @@ -12,6 +12,7 @@ use crate::vol::{get_vaults_vol, VaultVolume}; use cynic::Id; use reqwest::Url; use thiserror::Error; +use wasm_bindgen::{JsError, JsValue}; const ALL_PAGES_QUERY_PAGE_SIZE: u16 = 200; @@ -25,6 +26,18 @@ pub enum OrderbookSubgraphClientError { PaginationClientError(#[from] PaginationClientError), #[error(transparent)] ParseError(#[from] alloy::primitives::ruint::ParseError), + #[error(transparent)] + UrlParseError(#[from] url::ParseError), + #[cfg(target_family = "wasm")] + #[error(transparent)] + SerdeWasmBindgenError(#[from] serde_wasm_bindgen::Error), +} + +#[cfg(target_family = "wasm")] +impl From for JsValue { + fn from(value: OrderbookSubgraphClientError) -> Self { + JsError::new(&value.to_string()).into() + } } pub struct OrderbookSubgraphClient { diff --git a/crates/subgraph/src/pagination.rs b/crates/subgraph/src/pagination.rs index e50d21ff3..a44a4a626 100644 --- a/crates/subgraph/src/pagination.rs +++ b/crates/subgraph/src/pagination.rs @@ -2,8 +2,12 @@ use crate::{cynic_client::CynicClientError, utils::slice_list}; use serde::{Deserialize, Serialize}; use std::num::TryFromIntError; use thiserror::Error; +use tsify::Tsify; +use typeshare::typeshare; -#[derive(Clone, Serialize, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug, Tsify)] +#[typeshare] +#[tsify(into_wasm_abi, from_wasm_abi)] pub struct PaginationArgs { pub page: u16, pub page_size: u16, diff --git a/crates/subgraph/src/types/common.rs b/crates/subgraph/src/types/common.rs index 07302faac..d78e1da73 100644 --- a/crates/subgraph/src/types/common.rs +++ b/crates/subgraph/src/types/common.rs @@ -9,8 +9,10 @@ pub struct IdQueryVariables<'a> { pub id: &'a cynic::Id, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, Tsify)] #[serde(rename_all = "camelCase")] +#[typeshare] +#[tsify(into_wasm_abi, from_wasm_abi)] pub struct OrdersListFilterArgs { pub owners: Vec, pub active: Option, @@ -89,14 +91,16 @@ pub struct Order { pub active: bool, #[tsify(type = "SgBigInt")] pub timestamp_added: BigInt, + #[tsify(type = "string | undefined")] pub meta: Option, pub add_events: Vec, pub trades: Vec, } -#[derive(Debug, Serialize, Clone)] +#[derive(Debug, Serialize, Deserialize, Clone, Tsify)] #[typeshare] #[serde(rename_all = "camelCase")] +#[tsify(into_wasm_abi, from_wasm_abi)] pub struct OrderWithSubgraphName { pub order: Order, pub subgraph_name: String, diff --git a/tauri-app/src-tauri/Cargo.lock b/tauri-app/src-tauri/Cargo.lock index f98176982..ac4290e5d 100644 --- a/tauri-app/src-tauri/Cargo.lock +++ b/tauri-app/src-tauri/Cargo.lock @@ -8381,6 +8381,7 @@ dependencies = [ "thiserror", "tsify", "typeshare 1.0.1", + "url", "wasm-bindgen", ] From bb6ae4f9338149187c10dc8661a5387a1354e50b Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 13:33:45 +0300 Subject: [PATCH 03/13] build: add new crate to build list --- scripts/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.js b/scripts/build.js index 3dcd2570f..12c775a73 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -21,7 +21,7 @@ execSync("npm run build-wasm"); // build specified packages and include them in final index file // list of packages to build can be extended by adding new package // names to the list below -const packages = ["common", "quote"]; +const packages = ["common", "quote", "js_api"]; for (const package of packages) { execSync(`node scripts/buildPackage ${package}`); } From b79e69f02c0a75adcfe184201bb195f1909273a1 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 13:33:56 +0300 Subject: [PATCH 04/13] test: add tests for wasm bindings --- test-js/js_api/order.test.ts | 193 +++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 test-js/js_api/order.test.ts diff --git a/test-js/js_api/order.test.ts b/test-js/js_api/order.test.ts new file mode 100644 index 000000000..4e89a224e --- /dev/null +++ b/test-js/js_api/order.test.ts @@ -0,0 +1,193 @@ +import assert from "assert"; +import { getLocal } from "mockttp"; +import { describe, it, beforeEach, afterEach } from "vitest"; +import { Order, OrderWithSubgraphName } from "../../dist/types/js_api.js"; +import { getOrders, getOrder } from "../../dist/cjs/js_api.js"; + +const order1 = { + id: "order1", + orderBytes: + "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + orderHash: "0x1", + owner: "0x0000000000000000000000000000000000000000", + outputs: [ + { + id: "0x0000000000000000000000000000000000000000", + token: { + id: "0x0000000000000000000000000000000000000000", + address: "0x0000000000000000000000000000000000000000", + name: "T1", + symbol: "T1", + decimals: "0", + }, + balance: "0", + vaultId: "0", + owner: "0x0000000000000000000000000000000000000000", + ordersAsOutput: [], + ordersAsInput: [], + balanceChanges: [], + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + }, + ], + inputs: [ + { + id: "0x0000000000000000000000000000000000000000", + token: { + id: "0x0000000000000000000000000000000000000000", + address: "0x0000000000000000000000000000000000000000", + name: "T2", + symbol: "T2", + decimals: "0", + }, + balance: "0", + vaultId: "0", + owner: "0x0000000000000000000000000000000000000000", + ordersAsOutput: [], + ordersAsInput: [], + balanceChanges: [], + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + }, + ], + active: true, + addEvents: [ + { + transaction: { + blockNumber: "0", + timestamp: "0", + id: "0x0000000000000000000000000000000000000000", + from: "0x0000000000000000000000000000000000000000", + }, + }, + ], + meta: null, + timestampAdded: "0", + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + trades: [], +}; +const order2 = { + id: "order2", + orderBytes: + "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + orderHash: "0x2", + owner: "0x0000000000000000000000000000000000000000", + outputs: [ + { + id: "0x0000000000000000000000000000000000000000", + token: { + id: "0x0000000000000000000000000000000000000000", + address: "0x0000000000000000000000000000000000000000", + name: "T1", + symbol: "T1", + decimals: "0", + }, + balance: "0", + vaultId: "0", + owner: "0x0000000000000000000000000000000000000000", + ordersAsOutput: [], + ordersAsInput: [], + balanceChanges: [], + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + }, + ], + inputs: [ + { + id: "0x0000000000000000000000000000000000000000", + token: { + id: "0x0000000000000000000000000000000000000000", + address: "0x0000000000000000000000000000000000000000", + name: "T2", + symbol: "T2", + decimals: "0", + }, + balance: "0", + vaultId: "0", + owner: "0x0000000000000000000000000000000000000000", + ordersAsOutput: [], + ordersAsInput: [], + balanceChanges: [], + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + }, + ], + active: true, + addEvents: [ + { + transaction: { + blockNumber: "0", + timestamp: "0", + id: "0x0000000000000000000000000000000000000000", + from: "0x0000000000000000000000000000000000000000", + }, + }, + ], + meta: null, + timestampAdded: "0", + orderbook: { + id: "0x0000000000000000000000000000000000000000", + }, + trades: [], +}; + +describe("Rain Orderbook JS API Package Bindgen Tests", async function () { + const mockServer = getLocal(); + beforeEach(() => mockServer.start(8082)); + afterEach(() => mockServer.stop()); + + it("should fetch a single order", async () => { + await mockServer + .forPost("/sg1") + .thenReply(200, JSON.stringify({ data: { order: order1 } })); + + try { + const result: Order = await getOrder(mockServer.url + "/sg1", order1.id); + assert.equal(result.id, order1.id); + } catch (e) { + console.log(e); + assert.fail("expected to resolve, but failed"); + } + }); + + it("should fetch multiple orders from different subgraphs", async () => { + await mockServer + .forPost("/sg1") + .thenReply(200, JSON.stringify({ data: { orders: [order1] } })); + await mockServer + .forPost("/sg2") + .thenReply(200, JSON.stringify({ data: { orders: [order2] } })); + + try { + const result: OrderWithSubgraphName[] = await getOrders( + [ + { url: mockServer.url + "/sg1", name: "network-one" }, + { url: mockServer.url + "/sg2", name: "network-two" }, + ], + { + owners: [], + active: undefined, + order_hash: undefined, + }, + { + page: 1, + page_size: 10, + } + ); + assert.equal(result.length, 2); + assert.equal(result[0].order.id, order1.id); + assert.equal(result[0].subgraphName, "network-one"); + assert.equal(result[1].order.id, order2.id); + assert.equal(result[1].subgraphName, "network-two"); + } catch (e) { + console.log(e); + assert.fail("expected to resolve, but failed"); + } + }); +}); From f7830dbd0adbe5f6782a18b33d2b961f495f9a71 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 13:34:10 +0300 Subject: [PATCH 05/13] chore: update vscode settings --- .vscode/settings.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7e0ad4faa..959075a3e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "svelte.enable-ts-plugin": true, "rust-analyzer.linkedProjects": ["./Cargo.toml", "tauri-app/src-tauri/Cargo.toml"], + "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", @@ -47,5 +48,6 @@ "CI_FORK_SEPOLIA_DEPLOYER_ADDRESS": "", "CI_FORK_SEPOLIA_BLOCK_NUMBER": "", "COMMIT_SHA": "" - } + }, + "prettier.semi": true } From d56323f45c543f85455d15d9ab732d44b3426431 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 14:19:09 +0300 Subject: [PATCH 06/13] build: remove unused variables --- crates/js_api/src/order.rs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/crates/js_api/src/order.rs b/crates/js_api/src/order.rs index e7266aafa..95d121cb7 100644 --- a/crates/js_api/src/order.rs +++ b/crates/js_api/src/order.rs @@ -1,22 +1,12 @@ use cynic::Id; -use rain_orderbook_bindings::impl_wasm_traits; use rain_orderbook_subgraph_client::{ types::common::OrdersListFilterArgs, MultiOrderbookSubgraphClient, MultiSubgraphArgs, OrderbookSubgraphClient, OrderbookSubgraphClientError, PaginationArgs, }; use reqwest::Url; -use serde::{Deserialize, Serialize}; -use serde_wasm_bindgen::{from_value, to_value}; -use tsify::Tsify; +use serde_wasm_bindgen::to_value; use wasm_bindgen::prelude::*; -use wasm_bindgen::{ - convert::{ - js_value_vector_from_abi, js_value_vector_into_abi, FromWasmAbi, IntoWasmAbi, - LongRefFromWasmAbi, RefFromWasmAbi, TryFromJsValue, VectorFromWasmAbi, VectorIntoWasmAbi, - }, - describe::{inform, WasmDescribe, WasmDescribeVector, VECTOR}, - JsValue, UnwrapThrowExt, -}; +use wasm_bindgen::JsValue; /// Fetch all orders from multiple subgraphs /// Returns a list of OrderWithSubgraphName structs From f0f3f2b351b973a5152d610defcb75172acd08c7 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 16:02:18 +0300 Subject: [PATCH 07/13] build: correct target definitions for wasm --- crates/subgraph/src/multi_orderbook_client.rs | 23 ++++++++++++------- crates/subgraph/src/orderbook_client.rs | 2 ++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/crates/subgraph/src/multi_orderbook_client.rs b/crates/subgraph/src/multi_orderbook_client.rs index a5db692f1..8eb5bff87 100644 --- a/crates/subgraph/src/multi_orderbook_client.rs +++ b/crates/subgraph/src/multi_orderbook_client.rs @@ -1,15 +1,7 @@ use futures::future::join_all; -use rain_orderbook_bindings::impl_wasm_traits; use reqwest::Url; use serde::{Deserialize, Serialize}; -use serde_wasm_bindgen::{from_value, to_value}; use tsify::Tsify; -use wasm_bindgen::convert::{ - js_value_vector_from_abi, js_value_vector_into_abi, FromWasmAbi, IntoWasmAbi, - LongRefFromWasmAbi, RefFromWasmAbi, TryFromJsValue, VectorFromWasmAbi, VectorIntoWasmAbi, -}; -use wasm_bindgen::describe::{inform, WasmDescribe, WasmDescribeVector, VECTOR}; -use wasm_bindgen::{JsValue, UnwrapThrowExt}; use crate::{ types::common::{ @@ -18,6 +10,20 @@ use crate::{ OrderbookSubgraphClient, OrderbookSubgraphClientError, PaginationArgs, }; +#[cfg(target_family = "wasm")] +use rain_orderbook_bindings::impl_wasm_traits; +#[cfg(target_family = "wasm")] +use serde_wasm_bindgen::{from_value, to_value}; +#[cfg(target_family = "wasm")] +use wasm_bindgen::convert::{ + js_value_vector_from_abi, js_value_vector_into_abi, FromWasmAbi, IntoWasmAbi, + LongRefFromWasmAbi, RefFromWasmAbi, TryFromJsValue, VectorFromWasmAbi, VectorIntoWasmAbi, +}; +#[cfg(target_family = "wasm")] +use wasm_bindgen::describe::{inform, WasmDescribe, WasmDescribeVector, VECTOR}; +#[cfg(target_family = "wasm")] +use wasm_bindgen::{JsValue, UnwrapThrowExt}; + #[derive(Debug, Clone, Serialize, Deserialize, Tsify)] #[tsify(into_wasm_abi, from_wasm_abi)] pub struct MultiSubgraphArgs { @@ -25,6 +31,7 @@ pub struct MultiSubgraphArgs { url: Url, name: String, } +#[cfg(target_family = "wasm")] impl_wasm_traits!(MultiSubgraphArgs); pub struct MultiOrderbookSubgraphClient { diff --git a/crates/subgraph/src/orderbook_client.rs b/crates/subgraph/src/orderbook_client.rs index 73f58d3ac..e195370c4 100644 --- a/crates/subgraph/src/orderbook_client.rs +++ b/crates/subgraph/src/orderbook_client.rs @@ -12,6 +12,8 @@ use crate::vol::{get_vaults_vol, VaultVolume}; use cynic::Id; use reqwest::Url; use thiserror::Error; + +#[cfg(target_family = "wasm")] use wasm_bindgen::{JsError, JsValue}; const ALL_PAGES_QUERY_PAGE_SIZE: u16 = 200; From b8a9d8062815b2ec55844eeb288d98789bc761ea Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 6 Nov 2024 17:16:26 +0300 Subject: [PATCH 08/13] fix: some updates --- Cargo.lock | 2 -- Cargo.toml | 3 --- crates/js_api/Cargo.toml | 8 ++------ crates/js_api/src/lib.rs | 2 +- crates/js_api/src/subgraph/mod.rs | 1 + crates/js_api/src/{ => subgraph}/order.rs | 0 6 files changed, 4 insertions(+), 12 deletions(-) create mode 100644 crates/js_api/src/subgraph/mod.rs rename crates/js_api/src/{ => subgraph}/order.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 46975497d..2839a3eb2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6421,10 +6421,8 @@ version = "0.0.0-alpha.0" dependencies = [ "cynic", "js-sys", - "rain_orderbook_bindings", "rain_orderbook_subgraph_client", "reqwest 0.12.5", - "serde", "serde-wasm-bindgen 0.6.5", "tokio", "tsify", diff --git a/Cargo.toml b/Cargo.toml index f25dd278a..364e435cc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,8 +72,5 @@ path = "crates/settings" [workspace.dependencies.rain_orderbook_quote] path = "crates/quote" -[workspace.dependencies.rain_orderbook_js_api] -path = "crates/js_api" - [workspace.dependencies.rain_orderbook_test_fixtures] path = "crates/test_fixtures" \ No newline at end of file diff --git a/crates/js_api/Cargo.toml b/crates/js_api/Cargo.toml index 1a2789784..c3ce005bb 100644 --- a/crates/js_api/Cargo.toml +++ b/crates/js_api/Cargo.toml @@ -7,16 +7,12 @@ license.workspace = true homepage.workspace = true [lib] -crate-type = ["rlib", "cdylib"] +crate-type = ["cdylib"] -[dependencies] +[target.'cfg(target_family = "wasm")'.dependencies] cynic = { workspace = true } reqwest = { workspace = true } -rain_orderbook_bindings = { workspace = true } rain_orderbook_subgraph_client = { workspace = true } -serde = { workspace = true } - -[target.'cfg(target_family = "wasm")'.dependencies] js-sys = { version = "0.3.69" } wasm-bindgen = { version = "0.2.92" } serde-wasm-bindgen = { version = "0.6.5" } diff --git a/crates/js_api/src/lib.rs b/crates/js_api/src/lib.rs index 46f5ce8c0..514765816 100644 --- a/crates/js_api/src/lib.rs +++ b/crates/js_api/src/lib.rs @@ -1,2 +1,2 @@ #[cfg(target_family = "wasm")] -pub mod order; +pub mod subgraph; diff --git a/crates/js_api/src/subgraph/mod.rs b/crates/js_api/src/subgraph/mod.rs new file mode 100644 index 000000000..0e3ab359f --- /dev/null +++ b/crates/js_api/src/subgraph/mod.rs @@ -0,0 +1 @@ +pub mod order; diff --git a/crates/js_api/src/order.rs b/crates/js_api/src/subgraph/order.rs similarity index 100% rename from crates/js_api/src/order.rs rename to crates/js_api/src/subgraph/order.rs From 0e61e9cf1bc0ce951baaa47f061a7b56f7910a3f Mon Sep 17 00:00:00 2001 From: findolor Date: Thu, 7 Nov 2024 07:43:11 +0300 Subject: [PATCH 09/13] fix: make changes --- crates/js_api/Cargo.toml | 3 ++- crates/subgraph/src/pagination.rs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/js_api/Cargo.toml b/crates/js_api/Cargo.toml index c3ce005bb..5e85c6373 100644 --- a/crates/js_api/Cargo.toml +++ b/crates/js_api/Cargo.toml @@ -5,11 +5,12 @@ version.workspace = true edition.workspace = true license.workspace = true homepage.workspace = true +publish = false [lib] crate-type = ["cdylib"] -[target.'cfg(target_family = "wasm")'.dependencies] +[dependencies] cynic = { workspace = true } reqwest = { workspace = true } rain_orderbook_subgraph_client = { workspace = true } diff --git a/crates/subgraph/src/pagination.rs b/crates/subgraph/src/pagination.rs index a44a4a626..a3ec4518a 100644 --- a/crates/subgraph/src/pagination.rs +++ b/crates/subgraph/src/pagination.rs @@ -8,6 +8,7 @@ use typeshare::typeshare; #[derive(Clone, Serialize, Deserialize, Debug, Tsify)] #[typeshare] #[tsify(into_wasm_abi, from_wasm_abi)] +#[serde(rename_all = "camelCase")] pub struct PaginationArgs { pub page: u16, pub page_size: u16, From 8b99d7cbe3efee96e765a24ffa081adc2d0aba77 Mon Sep 17 00:00:00 2001 From: findolor Date: Thu, 7 Nov 2024 10:44:44 +0300 Subject: [PATCH 10/13] test: update tests --- test-js/js_api/order.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-js/js_api/order.test.ts b/test-js/js_api/order.test.ts index 4e89a224e..29fc8306a 100644 --- a/test-js/js_api/order.test.ts +++ b/test-js/js_api/order.test.ts @@ -173,11 +173,11 @@ describe("Rain Orderbook JS API Package Bindgen Tests", async function () { { owners: [], active: undefined, - order_hash: undefined, + orderHash: undefined, }, { page: 1, - page_size: 10, + pageSize: 10, } ); assert.equal(result.length, 2); From a097a7c4f5cdb9b56ac67ff0146affac4192f59a Mon Sep 17 00:00:00 2001 From: findolor Date: Thu, 7 Nov 2024 16:30:30 +0300 Subject: [PATCH 11/13] chore: update vscode settings --- .vscode/settings.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 959075a3e..8bda8372f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,6 @@ "svelte.enable-ts-plugin": true, "rust-analyzer.linkedProjects": ["./Cargo.toml", "tauri-app/src-tauri/Cargo.toml"], - "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", @@ -49,5 +48,4 @@ "CI_FORK_SEPOLIA_BLOCK_NUMBER": "", "COMMIT_SHA": "" }, - "prettier.semi": true } From c80d81d186f905ba52795a9da48fabebdb13622c Mon Sep 17 00:00:00 2001 From: rouzwelt Date: Thu, 7 Nov 2024 20:09:06 +0000 Subject: [PATCH 12/13] Update lib.rs --- crates/js_api/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/js_api/src/lib.rs b/crates/js_api/src/lib.rs index 514765816..bea902868 100644 --- a/crates/js_api/src/lib.rs +++ b/crates/js_api/src/lib.rs @@ -1,2 +1 @@ -#[cfg(target_family = "wasm")] pub mod subgraph; From ccf1952d324c138bbe91100ee3033869666a3420 Mon Sep 17 00:00:00 2001 From: rouzwelt Date: Thu, 7 Nov 2024 21:27:22 +0000 Subject: [PATCH 13/13] Update lib.rs --- crates/js_api/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/js_api/src/lib.rs b/crates/js_api/src/lib.rs index bea902868..514765816 100644 --- a/crates/js_api/src/lib.rs +++ b/crates/js_api/src/lib.rs @@ -1 +1,2 @@ +#[cfg(target_family = "wasm")] pub mod subgraph;