4578cda0ae
* Network-requester: throttle inbound connections (#1789) * Return and handle ClientRequest::LaneQueueLenghts * Pass lane queue lengths to inbound future * Remove unused self reference * Request lane queue lengths periodically for all open connections * Add timeouts * Rename to ConnectionCommandSender and Receiver * Rename to client_connection_tx/rx * Fix wasm build * Replace bool with enum * rust: bump required version to 1.65 in some crates that need it * Add step to release GH actions (#1792) * feat: add a release step to nym contracts GH action * feat: add shrinking the size of wasm * Possibilty to change gateway ws listener (#1779) * add: set gatewayListener * Update types.ts * Update worker.ts * Update contracts-build.yml * real_traffic_stream: reduce frequency of status print (#1794) * Update wallet and connect lock files (#1793) * client-core: add warning when delay multiplier is larger than 1 * Fix decrypting stored received msg (#1786) * Fix decrypting stored received msg * rustfmt * Moving binary message recovery to separate function Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com> * Feature/use expect instead of panicking (#1797) * Implementation of 'Debug' on 'RealMessage' * expect with failed channel name instead of throwing empty panics * Introduced Debug trait constraint in ProxyRunner * Derive Debug for socks5_requests::Message * Make connection_id optional in ClientRequest::Send (#1798) * changelog: add missing entry for fixing message decrypt in gateway-client * websocket-requests: fix length check before deserialize (#1799) * Fix export dkg contract addr (#1800) * Export dkg contract for mainnet when no config file present * Remove redundant env files * nym-cli: improve error reporting/handling and changed `vesting-schedule` queries to use query client instead of signing client * Feature/gateway client protocol version (#1795) * Introducing concept of gateway protocol version * Remove version-based gateway filtering * Fixed the unit test * grammar * Set build on latest release on schedule event * Added nightly build workflow on second latest release * socks5: if any task panics, signal all other tasks to shutdown (#1805) * socks5: signal shutdown on error * Mark as success * Tidy * Reduce wait to 5 sec * Replace unwrap with expect * Two more unwraps * Update changelog * client-core: less frequent status logging (#1806) * Feature/nym connect UI updates (#1784) * create custom titlebar * create help page * create generic modal component * create separate connection time component * link to shipyard docs * move timer to separate component and update connection status component usage * use separate component for copying ip and port details * only show infomodal once after connection * set service provider on tauri side * Emit events when stopped * listen and unlisten for tauri events * connect: add trace log to get_services * Add back CI notifications * Update README Co-authored-by: Jon Häggblad <jon.haggblad@gmail.com> Co-authored-by: Mark Sinclair <14054343+mmsinclair@users.noreply.github.com> * Use default serde value for upgrade (#1807) * fix ui overflow bug (#1808) * update nym connect error text (#1809) * set flag to false * Fix wait_for_signal_and_error on win (#1811) * Add socks5-client changes to nym-connect changelog * Fix links in nym-connect changelog * More entries in nym-connect CHANGELOG * Fix typo in changelog * Update CHANGELOG.md * Experiment/client refactoring (#1814) * experimenting with extracting more common client code * drying up the wasm client * allowing some dead code for the time being * fixed formatting in nym-connect * made socks5 client inside nym-connect immutable * made clippy a bit happier * hidden away target locking for recv timeout * New transactions for increasing amount of pledged tokens * unit tests * Added an option to pledge extra tokens through the vesting contract * Introduced wallet endpoints for new operations * Using updated pledge cap in the vesting contract * Bumping version numbers * Changelog for v1.1.1 * Bumping final version numbers for 1.1.1 * Bumping nym-cli version, missed it last time * socks5-client: SOCKS4a support (#1822) * socks5-client: SOCKS4a support * Tidy * Fix a few errors in socks5 client and network-requester (#1823) * Fix two unwraps in socks5 and network-requester * Make sure client task never sends shutdown signal * Fix panic on getting socks version * wip * connecting to the back and making the requests work * display details modal * logs removal * Feature/pledge more (#1679) * New transactions for increasing amount of pledged tokens * unit tests * Added an option to pledge extra tokens through the vesting contract * Introduced wallet endpoints for new operations * Using updated pledge cap in the vesting contract * Changelog update * nym-connect: update lock file * avoid mix tokens pools * amount error * envs/mainnet: update to latest mixnet contract and nymd validator url * validator-api: add missing shortform for --config-env-file (#1830) * gateway-client: handle shutdown listener (#1829) * WIP * WIP: try another approach * WIP * Reworked * Tidy * fix * validator-api: remove storage dependency in contract cache (#1685) * validator-api: remove storage dependency in contract cache * validator-client: update detailed routes * contract_cache: forward to new endpoints for compat * Move reward_estimate * client: add --no-cover and update --fastmode (#1831) * adding a oversaturaded bonding more modal * common/task: extract out spawn_with_report_error (#1837) * stop panic on failed buffer request * Compilable wasm client * Enabled hard error on lack of gateway-client protocol version * Missing generic parameter for ClientCoreError in BackendError * Removed unused imports * Additional wasm feature locking Co-authored-by: Jon Häggblad <jon.haggblad@gmail.com> Co-authored-by: Fran Arbanas <arbanasfran@gmail.com> Co-authored-by: cgi-bin/ <6095048+sven-hash@users.noreply.github.com> Co-authored-by: Mark Sinclair <14054343+mmsinclair@users.noreply.github.com> Co-authored-by: Bogdan-Ștefan Neacşu <bogdan@nymtech.net> Co-authored-by: Mark Sinclair <mmsinclair@users.noreply.github.com> Co-authored-by: Raphaël Walther <raphael@nymtech.net> Co-authored-by: Fouad <fmtabbara@hotmail.co.uk> Co-authored-by: Gala <calero.vg@gmail.com> Co-authored-by: Dave Hrycyszyn <futurechimp@users.noreply.github.com>
125 lines
4.1 KiB
JavaScript
125 lines
4.1 KiB
JavaScript
// Copyright 2020-2022 Nym Technologies SA
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
importScripts('nym_client_wasm.js');
|
|
|
|
console.log('Initializing worker');
|
|
|
|
// wasm_bindgen creates a global variable (with the exports attached) that is in scope after `importScripts`
|
|
const { default_debug, get_gateway, NymClient, set_panic_hook, Config } = wasm_bindgen;
|
|
|
|
class ClientWrapper {
|
|
constructor(config, onMessageHandler) {
|
|
this.rustClient = new NymClient(config);
|
|
this.rustClient.set_on_message(onMessageHandler);
|
|
this.rustClient.set_on_gateway_connect(this.onConnect);
|
|
}
|
|
|
|
selfAddress = () => {
|
|
return this.rustClient.self_address();
|
|
};
|
|
|
|
onConnect = () => {
|
|
console.log('Established (and authenticated) gateway connection!');
|
|
};
|
|
|
|
start = async () => {
|
|
// this is current limitation of wasm in rust - for async methods you can't take self by reference...
|
|
// I'm trying to figure out if I can somehow hack my way around it, but for time being you have to re-assign
|
|
// the object (it's the same one)
|
|
this.rustClient = await this.rustClient.start();
|
|
};
|
|
|
|
sendMessage = async (recipient, message) => {
|
|
this.rustClient = await this.rustClient.send_message(recipient, message);
|
|
};
|
|
|
|
sendBinaryMessage = async (recipient, message) => {
|
|
this.rustClient = await this.rustClient.send_binary_message(recipient, message);
|
|
};
|
|
}
|
|
|
|
let client = null;
|
|
|
|
async function main() {
|
|
// load WASM package
|
|
await wasm_bindgen('nym_client_wasm_bg.wasm');
|
|
|
|
console.log('Loaded WASM');
|
|
|
|
// sets up better stack traces in case of in-rust panics
|
|
set_panic_hook();
|
|
|
|
// validator server we will use to get topology from
|
|
const validator = 'https://validator.nymtech.net/api'; //"http://localhost:8081";
|
|
const preferredGateway = 'E3mvZTHQCdBvhfr178Swx9g4QG3kkRUun7YnToLMcMbM';
|
|
|
|
const gatewayEndpoint = await get_gateway(validator, preferredGateway);
|
|
gatewayEndpoint.gateway_listener = "wss://gateway1.nymtech.net:443"; // this is needed if we want it to work on the web. However this gateway is a v1 gateway, we will need to change for v2 once we get there
|
|
|
|
// only really useful if you want to adjust some settings like traffic rate
|
|
// (if not needed you can just pass a null)
|
|
const debug = default_debug();
|
|
|
|
debug.disable_main_poisson_packet_distribution = true;
|
|
debug.disable_loop_cover_traffic_stream = true;
|
|
debug.use_extended_packet_size = true;
|
|
// debug.average_packet_delay_ms = BigInt(10);
|
|
// debug.average_ack_delay_ms = BigInt(10);
|
|
// debug.ack_wait_addition_ms = BigInt(3000);
|
|
// debug.ack_wait_multiplier = 10;
|
|
|
|
debug.topology_refresh_rate_ms = BigInt(60000)
|
|
|
|
const config = new Config('my-awesome-wasm-client', validator, gatewayEndpoint, debug);
|
|
|
|
const onMessageHandler = (message) => {
|
|
self.postMessage({
|
|
kind: 'ReceiveMessage',
|
|
args: {
|
|
message,
|
|
},
|
|
});
|
|
};
|
|
|
|
console.log('Instantiating WASM client...');
|
|
client = new ClientWrapper(config, onMessageHandler);
|
|
console.log('Web worker creating WASM client...');
|
|
await client.start();
|
|
console.log('WASM client running!');
|
|
|
|
const selfAddress = client.rustClient.self_address();
|
|
console.log(`Client address is ${selfAddress}`);
|
|
self.postMessage({
|
|
kind: 'Ready',
|
|
args: {
|
|
selfAddress,
|
|
},
|
|
});
|
|
|
|
// Set callback to handle messages passed to the worker.
|
|
self.onmessage = async event => {
|
|
if (event.data && event.data.kind) {
|
|
switch (event.data.kind) {
|
|
case 'SendMessage': {
|
|
const { message, recipient } = event.data.args;
|
|
await client.sendMessage(message, recipient);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
// Let's get started!
|
|
main(); |