From 56a384ea09f6daabd1ed5daf74ed205751f7d582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Tue, 3 Oct 2023 09:36:25 +0100 Subject: [PATCH] [wasm-client] keeping ownership over 'ReceivedBufferRequestSender' channel when spawning 'ResponsePusher' (#3945) * [wasm-client] keeping ownership over 'ReceivedBufferRequestSender' channel when spawning 'ResponsePusher' * Bump version of Typescript SDK to RC.10 * GitHub Actions workflow to publish SDK to NPM * Bump package version manually --------- Co-authored-by: Mark Sinclair --- .github/workflows/publish-sdk-npm.yml | 10 ++++++---- Cargo.lock | 10 +++++----- common/task/src/manager.rs | 2 +- nym-browser-extension/storage/Cargo.toml | 2 +- sdk/typescript/codegen/contract-clients/package.json | 2 +- sdk/typescript/docs/package.json | 4 ++-- sdk/typescript/packages/mix-fetch/package.json | 2 +- sdk/typescript/packages/node-tester/package.json | 2 +- sdk/typescript/packages/nodejs-client/package.json | 4 ++-- sdk/typescript/packages/sdk-react/package.json | 2 +- sdk/typescript/packages/sdk/package.json | 2 +- sdk/typescript/packages/validator-client/package.json | 2 +- sdk/typescript/scripts/build-prod-sdk.sh | 8 +------- wasm/client/Cargo.toml | 2 +- wasm/client/Makefile | 3 +++ wasm/client/internal-dev/package.json | 2 +- wasm/client/internal-dev/webpack.config.js | 2 +- wasm/client/internal-dev/yarn.lock | 4 ++-- wasm/client/src/response_pusher.rs | 11 ++++++++++- wasm/full-nym-wasm/Cargo.toml | 2 +- wasm/mix-fetch/Cargo.toml | 2 +- wasm/node-tester/Cargo.toml | 2 +- 22 files changed, 45 insertions(+), 37 deletions(-) diff --git a/.github/workflows/publish-sdk-npm.yml b/.github/workflows/publish-sdk-npm.yml index fa4d096926..e5164d6dec 100644 --- a/.github/workflows/publish-sdk-npm.yml +++ b/.github/workflows/publish-sdk-npm.yml @@ -1,4 +1,4 @@ -name: publish-sdk-npm +name: Publish Typescript SDK on: workflow_dispatch: @@ -28,8 +28,10 @@ jobs: - name: Install dependencies run: yarn - - name: Build and publish + - name: Build WASM and Typescript SDK + run: yarn sdk:build + + - name: Publish to NPM env: NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} - working-directory: ./sdk/typescript/packages/sdk - run: scripts/publish.sh + run: ./sdk/typescript/scripts/publish.sh diff --git a/Cargo.lock b/Cargo.lock index ac05eb6c74..3361e5dc65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3020,7 +3020,7 @@ dependencies = [ [[package]] name = "extension-storage" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" dependencies = [ "bip39", "console_error_panic_hook", @@ -5613,7 +5613,7 @@ dependencies = [ [[package]] name = "mix-fetch-wasm" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" dependencies = [ "futures", "js-sys", @@ -6298,7 +6298,7 @@ dependencies = [ [[package]] name = "nym-client-wasm" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" dependencies = [ "anyhow", "futures", @@ -6917,7 +6917,7 @@ dependencies = [ [[package]] name = "nym-node-tester-wasm" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" dependencies = [ "futures", "js-sys", @@ -7511,7 +7511,7 @@ dependencies = [ [[package]] name = "nym-wasm-sdk" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" dependencies = [ "mix-fetch-wasm", "nym-client-wasm", diff --git a/common/task/src/manager.rs b/common/task/src/manager.rs index a59ae545d9..03e92f05cf 100644 --- a/common/task/src/manager.rs +++ b/common/task/src/manager.rs @@ -434,7 +434,7 @@ impl TaskClient { .await { self.log(Level::Error, "Task stopped without shutdown called"); - panic!("{timeout}") + panic!("{:?}: {timeout}", self.name) } } diff --git a/nym-browser-extension/storage/Cargo.toml b/nym-browser-extension/storage/Cargo.toml index 9ec0066330..3269922158 100644 --- a/nym-browser-extension/storage/Cargo.toml +++ b/nym-browser-extension/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "extension-storage" -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" edition = "2021" license = "Apache-2.0" repository = "https://github.com/nymtech/nym" diff --git a/sdk/typescript/codegen/contract-clients/package.json b/sdk/typescript/codegen/contract-clients/package.json index e898a2201f..432e907bcc 100644 --- a/sdk/typescript/codegen/contract-clients/package.json +++ b/sdk/typescript/codegen/contract-clients/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/contract-clients", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "description": "A client for all Nym smart contracts", "license": "Apache-2.0", "author": "Nym Technologies SA", diff --git a/sdk/typescript/docs/package.json b/sdk/typescript/docs/package.json index fd56bf8024..92f7edc8e6 100644 --- a/sdk/typescript/docs/package.json +++ b/sdk/typescript/docs/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/ts-sdk-docs", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "description": "Nym Typescript SDK Docs", "license": "Apache-2.0", "author": "Nym Technologies SA", @@ -51,4 +51,4 @@ "typescript": "^4.9.3" }, "private": false -} +} \ No newline at end of file diff --git a/sdk/typescript/packages/mix-fetch/package.json b/sdk/typescript/packages/mix-fetch/package.json index 49c51d05da..20376bd9a8 100644 --- a/sdk/typescript/packages/mix-fetch/package.json +++ b/sdk/typescript/packages/mix-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/mix-fetch", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "description": "This package is a drop-in replacement for `fetch` to send HTTP requests over the Nym Mixnet.", "license": "Apache-2.0", "author": "Nym Technologies SA", diff --git a/sdk/typescript/packages/node-tester/package.json b/sdk/typescript/packages/node-tester/package.json index 4a52628bb1..6d8002fbfd 100644 --- a/sdk/typescript/packages/node-tester/package.json +++ b/sdk/typescript/packages/node-tester/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/node-tester", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "description": "This package provides a tester that can send test packets to mixnode that is part of the Nym Mixnet.", "license": "Apache-2.0", "author": "Nym Technologies SA", diff --git a/sdk/typescript/packages/nodejs-client/package.json b/sdk/typescript/packages/nodejs-client/package.json index 906a603198..fa92d27d10 100644 --- a/sdk/typescript/packages/nodejs-client/package.json +++ b/sdk/typescript/packages/nodejs-client/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/nodejs-client", - "version": "1.2.0-rc.5", + "version": "1.2.0-rc.10", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ @@ -27,7 +27,7 @@ "tsc": "tsc --noEmit true" }, "dependencies": { - "@nymproject/nym-client-wasm-node": ">=1.2.0-rc.7 || ^1", + "@nymproject/nym-client-wasm-node": ">=1.2.0-rc.10 || ^1", "comlink": "^4.3.1" }, "devDependencies": { diff --git a/sdk/typescript/packages/sdk-react/package.json b/sdk/typescript/packages/sdk-react/package.json index fb66fa108a..62c74e82c2 100644 --- a/sdk/typescript/packages/sdk-react/package.json +++ b/sdk/typescript/packages/sdk-react/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk-react", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ diff --git a/sdk/typescript/packages/sdk/package.json b/sdk/typescript/packages/sdk/package.json index 83b82cca23..f4029e3b9d 100644 --- a/sdk/typescript/packages/sdk/package.json +++ b/sdk/typescript/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/sdk", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "license": "Apache-2.0", "author": "Nym Technologies SA", "files": [ diff --git a/sdk/typescript/packages/validator-client/package.json b/sdk/typescript/packages/validator-client/package.json index 8c415c119e..bf7ea365b4 100644 --- a/sdk/typescript/packages/validator-client/package.json +++ b/sdk/typescript/packages/validator-client/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/nym-validator-client", - "version": "1.2.0-rc.9", + "version": "1.2.0-rc.10", "description": "A TypeScript client for interacting with smart contracts in Nym validators", "license": "Apache-2.0", "author": "Nym Technologies SA (https://nymtech.net)", diff --git a/sdk/typescript/scripts/build-prod-sdk.sh b/sdk/typescript/scripts/build-prod-sdk.sh index 25a9828d60..70a0175abe 100755 --- a/sdk/typescript/scripts/build-prod-sdk.sh +++ b/sdk/typescript/scripts/build-prod-sdk.sh @@ -17,10 +17,4 @@ yarn build:wasm yarn build:sdk # build documentation -cd sdk/typescript/docs -npm i -npm run docs:prod:build -cd ../../.. - -# build examples -pwd +yarn docs:prod:build diff --git a/wasm/client/Cargo.toml b/wasm/client/Cargo.toml index 9d56ca70f8..ec8d1769bb 100644 --- a/wasm/client/Cargo.toml +++ b/wasm/client/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nym-client-wasm" authors = ["Dave Hrycyszyn ", "Jedrzej Stuczynski "] -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" edition = "2021" keywords = ["nym", "sphinx", "wasm", "webassembly", "privacy", "client"] license = "Apache-2.0" diff --git a/wasm/client/Makefile b/wasm/client/Makefile index bae17f2713..ffca08583c 100644 --- a/wasm/client/Makefile +++ b/wasm/client/Makefile @@ -5,6 +5,9 @@ build: wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/client wasm-opt -Oz -o ../../dist/wasm/client/nym_client_wasm_bg.wasm ../../dist/wasm/client/nym_client_wasm_bg.wasm +build-debug-dev: + wasm-pack build --scope nymproject --target no-modules + build-rust-node: wasm-pack build --scope nymproject --target nodejs --out-dir ../../dist/node/wasm/client wasm-opt -Oz -o ../../dist/node/wasm/client/nym_client_wasm_bg.wasm ../../dist/node/wasm/client/nym_client_wasm_bg.wasm diff --git a/wasm/client/internal-dev/package.json b/wasm/client/internal-dev/package.json index 3c15217913..e653cfd88e 100644 --- a/wasm/client/internal-dev/package.json +++ b/wasm/client/internal-dev/package.json @@ -35,6 +35,6 @@ "webpack-dev-server": "^4.7.4" }, "dependencies": { - "@nymproject/nym-client-wasm": "file:../../../dist/wasm/client" + "@nymproject/nym-client-wasm": "file:../pkg" } } diff --git a/wasm/client/internal-dev/webpack.config.js b/wasm/client/internal-dev/webpack.config.js index 369c59093f..bc1242190d 100644 --- a/wasm/client/internal-dev/webpack.config.js +++ b/wasm/client/internal-dev/webpack.config.js @@ -22,7 +22,7 @@ module.exports = { patterns: [ 'index.html', { - from: '../../../dist/wasm/client/*.(js|wasm)', + from: '../pkg/*.(js|wasm)', to: '[name][ext]', }, ], diff --git a/wasm/client/internal-dev/yarn.lock b/wasm/client/internal-dev/yarn.lock index d74175fc43..60952d00e8 100644 --- a/wasm/client/internal-dev/yarn.lock +++ b/wasm/client/internal-dev/yarn.lock @@ -73,8 +73,8 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nymproject/nym-client-wasm@file:../../../dist/wasm/client": - version "1.2.0-rc.2" +"@nymproject/nym-client-wasm@file:../pkg": + version "1.2.0-rc.9" "@types/body-parser@*": version "1.19.2" diff --git a/wasm/client/src/response_pusher.rs b/wasm/client/src/response_pusher.rs index 42d88a86c8..e0a795a79b 100644 --- a/wasm/client/src/response_pusher.rs +++ b/wasm/client/src/response_pusher.rs @@ -8,12 +8,16 @@ use wasm_bindgen::JsValue; use wasm_bindgen_futures::spawn_local; use wasm_client_core::client::base_client::ClientOutput; use wasm_client_core::client::received_buffer::{ - ReceivedBufferMessage, ReconstructedMessagesReceiver, + ReceivedBufferMessage, ReceivedBufferRequestSender, ReconstructedMessagesReceiver, }; use wasm_utils::console_error; pub(crate) struct ResponsePusher { reconstructed_receiver: ReconstructedMessagesReceiver, + + // we need to keep that channel alive as not to trigger the shutdown + _received_buffer_request_sender: ReceivedBufferRequestSender, + on_message: js_sys::Function, } @@ -36,12 +40,17 @@ impl ResponsePusher { ResponsePusher { reconstructed_receiver, + _received_buffer_request_sender: client_output.received_buffer_request_sender, on_message, } } pub(crate) fn start(mut self) { spawn_local(async move { + // for some reason if this channel is not explicitly moved into the block, + // it gets dropped when spawning the promise + let _request_sender = self._received_buffer_request_sender; + let this = JsValue::null(); while let Some(reconstructed) = self.reconstructed_receiver.next().await { diff --git a/wasm/full-nym-wasm/Cargo.toml b/wasm/full-nym-wasm/Cargo.toml index 22f6619647..c2570602bb 100644 --- a/wasm/full-nym-wasm/Cargo.toml +++ b/wasm/full-nym-wasm/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nym-wasm-sdk" authors = ["Jedrzej Stuczynski "] -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" edition = "2021" keywords = ["nym", "sphinx", "wasm", "webassembly", "privacy"] license = "Apache-2.0" diff --git a/wasm/mix-fetch/Cargo.toml b/wasm/mix-fetch/Cargo.toml index 31ac8360a5..da79e729bb 100644 --- a/wasm/mix-fetch/Cargo.toml +++ b/wasm/mix-fetch/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "mix-fetch-wasm" authors = ["Jedrzej Stuczynski "] -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" edition = "2021" keywords = ["nym", "fetch", "wasm", "webassembly", "privacy"] license = "Apache-2.0" diff --git a/wasm/node-tester/Cargo.toml b/wasm/node-tester/Cargo.toml index 2afba46306..9141662578 100644 --- a/wasm/node-tester/Cargo.toml +++ b/wasm/node-tester/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nym-node-tester-wasm" authors = ["Jedrzej Stuczynski "] -version = "1.2.0-rc.9" +version = "1.2.0-rc.10" edition = "2021" keywords = ["nym", "sphinx", "webassembly", "privacy", "tester"] license = "Apache-2.0"