From fcc5398aab3a991ba8a6da5fb73f6cc5283321da Mon Sep 17 00:00:00 2001
From: Fouad
Date: Mon, 3 Jul 2023 16:53:39 +0100
Subject: [PATCH] Feature/node tester package (#3634)
* create node tester package dir
* start building node tester package
* refactor code + build updates
* fix up types
* add more methods and fix up types
* use node tester sdk inside wallet
* fix frontend state
* Use Node 18 instead of 16
* Fix up dependencies and yarn workspace
* Fix lint error
* Try to fix up linting error
* Remove explorer linting and move it to the existing action
* Add wasm-pack build to linting GH Action
* change lerna to use workspaces and fix linting errors
* Fix up node versions in GitHub Actions and add wasm-pack
* fix build:lint target in sdk
* exclude all worker.js from eslint for sdk
---------
Co-authored-by: Mark Sinclair
---
.github/workflows/audit.yml | 2 +-
.github/workflows/build-ts-packages.yml | 8 +-
.github/workflows/cd-dev.yml | 2 +-
.github/workflows/cd-docs.yml | 2 +-
.github/workflows/ci-dev.yml | 2 +-
.github/workflows/ci-docs.yml | 2 +-
.github/workflows/connect-desktop-ci.yml | 2 +-
.github/workflows/network-explorer-lint.yml | 24 -
.github/workflows/network-explorer.yml | 2 +-
.github/workflows/nightly_build.yml | 2 +-
.github/workflows/nightly_build_release.yml | 2 +-
.github/workflows/nightly_build_release2.yml | 2 +-
.../workflows/nym-connect-publish-macos.yml | 2 +-
.../workflows/nym-connect-publish-ubuntu.yml | 2 +-
.../nym-connect-publish-windows10.yml | 2 +-
.../workflows/nym-wallet-publish-macos.yml | 2 +-
.../workflows/nym-wallet-publish-ubuntu.yml | 2 +-
.../nym-wallet-publish-windows10.yml | 2 +-
.github/workflows/nym-wallet-storybook.yml | 12 +-
.github/workflows/nym_wallet.yml | 2 +-
.github/workflows/support-files/.nvmrc | 2 +-
.github/workflows/typescript-lint.yml | 8 +-
clients/validator/.nvmrc | 2 +-
explorer/.nvmrc | 2 +-
lerna.json | 10 +-
nym-connect/desktop/.nvmrc | 2 +-
nym-connect/mobile/.nvmrc | 2 +-
nym-wallet/.nvmrc | 2 +-
nym-wallet/package.json | 2 +-
.../src/components/TestNode/Packets.tsx | 2 +-
.../src/components/TestNode/PrintResults.tsx | 4 +-
.../src/components/TestNode/Results.tsx | 3 +-
.../node-settings/node-test/__mocks__.ts | 55 --
.../bonding/node-settings/node-test/index.tsx | 98 ++-
.../bonding/node-settings/node-test/types.ts | 38 --
.../bonding/node-settings/node-test/worker.ts | 102 ---
package.json | 10 +-
.../build/yarn/wasm-placeholder/package.json | 5 +
sdk/typescript/.eslintrc.js | 2 +-
.../examples/node-tester/plain-html/.babelrc | 3 +
.../examples/node-tester/plain-html/README.md | 14 +
.../node-tester/plain-html/jest.config.js | 5 +
.../node-tester/plain-html/package.json | 61 ++
.../node-tester/plain-html/src/index.html | 29 +
.../node-tester/plain-html/src/index.ts | 116 ++++
.../node-tester/plain-html/tsconfig.json | 9 +
.../node-tester/plain-html/tsconfig.prod.json | 10 +
.../node-tester/plain-html/webpack.common.js | 30 +
.../node-tester/plain-html/webpack.config.js | 67 ++
.../node-tester/plain-html/webpack.prod.js | 42 ++
.../examples/plain-html/tsconfig.prod.json | 16 +-
sdk/typescript/packages/sdk/.gitignore | 1 +
sdk/typescript/packages/sdk/package.json | 4 +-
.../packages/sdk/rollup-cjs.config.mjs | 9 +-
.../packages/sdk/rollup-esm.config.mjs | 9 +-
.../sdk/rollup-node-tester-worker.config.mjs | 26 +
sdk/typescript/packages/sdk/scripts/build.sh | 15 +-
.../packages/sdk/src/mixnet/index.ts | 2 +
.../sdk/src/mixnet/node-tester/constants.ts | 5 +
.../sdk/src/mixnet/node-tester/index.ts | 50 ++
.../sdk/src/mixnet/node-tester/types.ts | 65 ++
.../sdk/src/mixnet/node-tester/worker.ts | 105 +++
.../src/mixnet/wasm/types-from-wasm-pack.ts | 336 ++++++++++
.../packages/sdk/src/mixnet/wasm/types.ts | 174 +----
.../packages/sdk/src/mixnet/wasm/worker.ts | 61 +-
ts-packages/mock-nym-api/src/index.ts | 1 +
.../src/App.tsx | 1 +
yarn.lock | 627 +++++++++---------
68 files changed, 1439 insertions(+), 883 deletions(-)
delete mode 100644 .github/workflows/network-explorer-lint.yml
delete mode 100644 nym-wallet/src/pages/bonding/node-settings/node-test/__mocks__.ts
delete mode 100644 nym-wallet/src/pages/bonding/node-settings/node-test/types.ts
delete mode 100644 nym-wallet/src/pages/bonding/node-settings/node-test/worker.ts
create mode 100644 scripts/build/yarn/wasm-placeholder/package.json
create mode 100644 sdk/typescript/examples/node-tester/plain-html/.babelrc
create mode 100644 sdk/typescript/examples/node-tester/plain-html/README.md
create mode 100644 sdk/typescript/examples/node-tester/plain-html/jest.config.js
create mode 100644 sdk/typescript/examples/node-tester/plain-html/package.json
create mode 100644 sdk/typescript/examples/node-tester/plain-html/src/index.html
create mode 100644 sdk/typescript/examples/node-tester/plain-html/src/index.ts
create mode 100644 sdk/typescript/examples/node-tester/plain-html/tsconfig.json
create mode 100644 sdk/typescript/examples/node-tester/plain-html/tsconfig.prod.json
create mode 100644 sdk/typescript/examples/node-tester/plain-html/webpack.common.js
create mode 100644 sdk/typescript/examples/node-tester/plain-html/webpack.config.js
create mode 100644 sdk/typescript/examples/node-tester/plain-html/webpack.prod.js
create mode 100644 sdk/typescript/packages/sdk/rollup-node-tester-worker.config.mjs
create mode 100644 sdk/typescript/packages/sdk/src/mixnet/node-tester/constants.ts
create mode 100644 sdk/typescript/packages/sdk/src/mixnet/node-tester/index.ts
create mode 100644 sdk/typescript/packages/sdk/src/mixnet/node-tester/types.ts
create mode 100644 sdk/typescript/packages/sdk/src/mixnet/node-tester/worker.ts
create mode 100644 sdk/typescript/packages/sdk/src/mixnet/wasm/types-from-wasm-pack.ts
diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml
index 9e42b31964..1a55fd34fa 100644
--- a/.github/workflows/audit.yml
+++ b/.github/workflows/audit.yml
@@ -38,7 +38,7 @@ jobs:
- name: install npm
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Matrix - Node Install
run: npm install
working-directory: .github/workflows/support-files
diff --git a/.github/workflows/build-ts-packages.yml b/.github/workflows/build-ts-packages.yml
index ba744b1a65..1fb210bd8e 100644
--- a/.github/workflows/build-ts-packages.yml
+++ b/.github/workflows/build-ts-packages.yml
@@ -16,9 +16,15 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Setup yarn
run: npm install -g yarn
+ - name: Install Rust stable
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ - name: Install wasm-pack
+ run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Build
run: yarn && yarn build && yarn build:ci
- name: Deploy branch to CI www (storybook)
diff --git a/.github/workflows/cd-dev.yml b/.github/workflows/cd-dev.yml
index ab5dd75f21..0ca463345f 100644
--- a/.github/workflows/cd-dev.yml
+++ b/.github/workflows/cd-dev.yml
@@ -16,7 +16,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: "16"
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/cd-docs.yml b/.github/workflows/cd-docs.yml
index 6e7882785a..782a2c196d 100644
--- a/.github/workflows/cd-docs.yml
+++ b/.github/workflows/cd-docs.yml
@@ -16,7 +16,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: "16"
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/ci-dev.yml b/.github/workflows/ci-dev.yml
index 39432c90e3..82068fce76 100644
--- a/.github/workflows/ci-dev.yml
+++ b/.github/workflows/ci-dev.yml
@@ -16,7 +16,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: "16"
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-docs.yml
index e18370669d..2523013204 100644
--- a/.github/workflows/ci-docs.yml
+++ b/.github/workflows/ci-docs.yml
@@ -16,7 +16,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: "16"
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/connect-desktop-ci.yml b/.github/workflows/connect-desktop-ci.yml
index 5846212222..569203cfff 100644
--- a/.github/workflows/connect-desktop-ci.yml
+++ b/.github/workflows/connect-desktop-ci.yml
@@ -20,7 +20,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Yarn
run: npm install -g yarn
- run: yarn
diff --git a/.github/workflows/network-explorer-lint.yml b/.github/workflows/network-explorer-lint.yml
deleted file mode 100644
index 35c07e654d..0000000000
--- a/.github/workflows/network-explorer-lint.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Linting for Network Explorer (eslint/prettier)
-
-on:
- pull_request:
- paths:
- - 'explorer/**'
-
-defaults:
- run:
- working-directory: explorer
-
-jobs:
- build:
- runs-on: custom-runner-linux
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-node@v3
- with:
- node-version: 16
- - name: Setup yarn
- run: npm install -g yarn
- - name: Run ESLint
- # GitHub should automatically annotate the PR
- run: yarn && yarn lint
\ No newline at end of file
diff --git a/.github/workflows/network-explorer.yml b/.github/workflows/network-explorer.yml
index 9f50548105..b4431b0ed4 100644
--- a/.github/workflows/network-explorer.yml
+++ b/.github/workflows/network-explorer.yml
@@ -21,7 +21,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Setup yarn
run: npm install -g yarn
continue-on-error: true
diff --git a/.github/workflows/nightly_build.yml b/.github/workflows/nightly_build.yml
index 64b95f6368..1ee391d6a7 100644
--- a/.github/workflows/nightly_build.yml
+++ b/.github/workflows/nightly_build.yml
@@ -152,7 +152,7 @@ jobs:
uses: actions/setup-node@v3
if: env.WORKFLOW_CONCLUSION == 'failure'
with:
- node-version: 16
+ node-version: 18
- name: Matrix - Node Install
if: env.WORKFLOW_CONCLUSION == 'failure'
run: npm install
diff --git a/.github/workflows/nightly_build_release.yml b/.github/workflows/nightly_build_release.yml
index 71b7df2bd7..fa1c465c97 100644
--- a/.github/workflows/nightly_build_release.yml
+++ b/.github/workflows/nightly_build_release.yml
@@ -167,7 +167,7 @@ jobs:
uses: actions/setup-node@v3
if: env.WORKFLOW_CONCLUSION == 'failure'
with:
- node-version: 16
+ node-version: 18
- name: Matrix - Node Install
if: env.WORKFLOW_CONCLUSION == 'failure'
run: npm install
diff --git a/.github/workflows/nightly_build_release2.yml b/.github/workflows/nightly_build_release2.yml
index ee85a1c978..3c3f962582 100644
--- a/.github/workflows/nightly_build_release2.yml
+++ b/.github/workflows/nightly_build_release2.yml
@@ -167,7 +167,7 @@ jobs:
uses: actions/setup-node@v3
if: env.WORKFLOW_CONCLUSION == 'failure'
with:
- node-version: 16
+ node-version: 18
- name: Matrix - Node Install
if: env.WORKFLOW_CONCLUSION == 'failure'
run: npm install
diff --git a/.github/workflows/nym-connect-publish-macos.yml b/.github/workflows/nym-connect-publish-macos.yml
index 0c9b33e416..379443d4dd 100644
--- a/.github/workflows/nym-connect-publish-macos.yml
+++ b/.github/workflows/nym-connect-publish-macos.yml
@@ -23,7 +23,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/nym-connect-publish-ubuntu.yml b/.github/workflows/nym-connect-publish-ubuntu.yml
index 473371c9e0..25d288581d 100644
--- a/.github/workflows/nym-connect-publish-ubuntu.yml
+++ b/.github/workflows/nym-connect-publish-ubuntu.yml
@@ -29,7 +29,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
diff --git a/.github/workflows/nym-connect-publish-windows10.yml b/.github/workflows/nym-connect-publish-windows10.yml
index 7bd0ac1bc6..4a869caf3e 100644
--- a/.github/workflows/nym-connect-publish-windows10.yml
+++ b/.github/workflows/nym-connect-publish-windows10.yml
@@ -42,7 +42,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
diff --git a/.github/workflows/nym-wallet-publish-macos.yml b/.github/workflows/nym-wallet-publish-macos.yml
index d3ef82759e..81c27a8338 100644
--- a/.github/workflows/nym-wallet-publish-macos.yml
+++ b/.github/workflows/nym-wallet-publish-macos.yml
@@ -23,7 +23,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
with:
diff --git a/.github/workflows/nym-wallet-publish-ubuntu.yml b/.github/workflows/nym-wallet-publish-ubuntu.yml
index 2b5a55c37a..1f2bb0330d 100644
--- a/.github/workflows/nym-wallet-publish-ubuntu.yml
+++ b/.github/workflows/nym-wallet-publish-ubuntu.yml
@@ -28,7 +28,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
diff --git a/.github/workflows/nym-wallet-publish-windows10.yml b/.github/workflows/nym-wallet-publish-windows10.yml
index 53411b7571..044816953b 100644
--- a/.github/workflows/nym-wallet-publish-windows10.yml
+++ b/.github/workflows/nym-wallet-publish-windows10.yml
@@ -42,7 +42,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install Rust stable
uses: actions-rs/toolchain@v1
diff --git a/.github/workflows/nym-wallet-storybook.yml b/.github/workflows/nym-wallet-storybook.yml
index e98fe5e338..88f1230895 100644
--- a/.github/workflows/nym-wallet-storybook.yml
+++ b/.github/workflows/nym-wallet-storybook.yml
@@ -16,19 +16,9 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Setup yarn
run: npm install -g yarn
- - name: Install Rust stable
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- - name: Install wasm-pack
- run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- working-directory: clients/webassembly
- - name: Build WASM
- run: wasm-pack build
- working-directory: clients/webassembly
- name: Build dependencies
run: yarn && yarn build
- name: Build storybook
diff --git a/.github/workflows/nym_wallet.yml b/.github/workflows/nym_wallet.yml
index 4b921ffb7a..d110314899 100644
--- a/.github/workflows/nym_wallet.yml
+++ b/.github/workflows/nym_wallet.yml
@@ -37,7 +37,7 @@ jobs:
- name: Node v16
uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Install yarn for building application
run: yarn install
diff --git a/.github/workflows/support-files/.nvmrc b/.github/workflows/support-files/.nvmrc
index b6a7d89c68..3c032078a4 100644
--- a/.github/workflows/support-files/.nvmrc
+++ b/.github/workflows/support-files/.nvmrc
@@ -1 +1 @@
-16
+18
diff --git a/.github/workflows/typescript-lint.yml b/.github/workflows/typescript-lint.yml
index 347d9ea0f0..b473107386 100644
--- a/.github/workflows/typescript-lint.yml
+++ b/.github/workflows/typescript-lint.yml
@@ -11,6 +11,7 @@ on:
- 'nym-connect/mobile/package.json'
- 'nym-wallet/src/**'
- 'nym-wallet/package.json'
+ - 'explorer/**'
pull_request:
paths:
- 'ts-packages/**'
@@ -21,6 +22,7 @@ on:
- 'nym-connect/mobile/package.json'
- 'nym-wallet/src/**'
- 'nym-wallet/package.json'
+ - 'explorer/**'
jobs:
build:
@@ -33,7 +35,7 @@ jobs:
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v3
with:
- node-version: 16
+ node-version: 18
- name: Setup yarn
run: npm install -g yarn
- name: Install Rust stable
@@ -42,10 +44,6 @@ jobs:
toolchain: stable
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- working-directory: clients/webassembly
- - name: Build WASM
- run: wasm-pack build
- working-directory: clients/webassembly
- name: Install
run: yarn
- name: Build packages
diff --git a/clients/validator/.nvmrc b/clients/validator/.nvmrc
index 19c7bdba7b..25bf17fc5a 100644
--- a/clients/validator/.nvmrc
+++ b/clients/validator/.nvmrc
@@ -1 +1 @@
-16
\ No newline at end of file
+18
\ No newline at end of file
diff --git a/explorer/.nvmrc b/explorer/.nvmrc
index b6a7d89c68..3c032078a4 100644
--- a/explorer/.nvmrc
+++ b/explorer/.nvmrc
@@ -1 +1 @@
-16
+18
diff --git a/lerna.json b/lerna.json
index 5d17094fd5..851bdf0b54 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,10 +1,4 @@
{
- "packages": [
- "ts-packages/*",
- "nym-wallet",
- "nym-connect/**",
- "sdk/typescript/examples/docs",
- "sdk/typescript/packages/**"
- ],
- "version": "0.0.0"
+ "version": "0.0.0",
+ "useWorkspaces": true
}
diff --git a/nym-connect/desktop/.nvmrc b/nym-connect/desktop/.nvmrc
index da2d3988d7..25bf17fc5a 100644
--- a/nym-connect/desktop/.nvmrc
+++ b/nym-connect/desktop/.nvmrc
@@ -1 +1 @@
-14
\ No newline at end of file
+18
\ No newline at end of file
diff --git a/nym-connect/mobile/.nvmrc b/nym-connect/mobile/.nvmrc
index da2d3988d7..25bf17fc5a 100644
--- a/nym-connect/mobile/.nvmrc
+++ b/nym-connect/mobile/.nvmrc
@@ -1 +1 @@
-14
\ No newline at end of file
+18
\ No newline at end of file
diff --git a/nym-wallet/.nvmrc b/nym-wallet/.nvmrc
index 19c7bdba7b..25bf17fc5a 100644
--- a/nym-wallet/.nvmrc
+++ b/nym-wallet/.nvmrc
@@ -1 +1 @@
-16
\ No newline at end of file
+18
\ No newline at end of file
diff --git a/nym-wallet/package.json b/nym-wallet/package.json
index 4308313fe7..d6c7cdf442 100644
--- a/nym-wallet/package.json
+++ b/nym-wallet/package.json
@@ -31,6 +31,7 @@
"@nymproject/mui-theme": "^1.0.0",
"@nymproject/react": "^1.0.0",
"@nymproject/types": "^1.0.0",
+ "@nymproject/sdk": "1",
"@storybook/react": "^6.5.15",
"@tauri-apps/api": "^1.2.0",
"@tauri-apps/tauri-forage": "^1.0.0-beta.2",
@@ -41,7 +42,6 @@
"lodash": "^4.17.21",
"notistack": "^2.0.3",
"npm-run-all": "^4.1.5",
- "nym-client-wasm": "1.1.1",
"qrcode.react": "^1.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/nym-wallet/src/components/TestNode/Packets.tsx b/nym-wallet/src/components/TestNode/Packets.tsx
index 46ee86bae1..dfbc4d7144 100644
--- a/nym-wallet/src/components/TestNode/Packets.tsx
+++ b/nym-wallet/src/components/TestNode/Packets.tsx
@@ -1,6 +1,6 @@
import React from 'react';
+import { TestStatus } from '@nymproject/sdk';
import { Divider, Typography } from '@mui/material';
-import { TestStatus } from 'src/pages/bonding/node-settings/node-test/types';
import { ResultsCard, ResultsCardDetail } from './ResultsCard';
export const Packets = ({
diff --git a/nym-wallet/src/components/TestNode/PrintResults.tsx b/nym-wallet/src/components/TestNode/PrintResults.tsx
index 1395d2b575..c225d73708 100644
--- a/nym-wallet/src/components/TestNode/PrintResults.tsx
+++ b/nym-wallet/src/components/TestNode/PrintResults.tsx
@@ -1,8 +1,8 @@
import React, { useEffect } from 'react';
import { Card, CardContent, CardHeader, Dialog, Divider } from '@mui/material';
import { NymLogo } from '@nymproject/react/logo/NymLogo';
-import { ResultsCardDetail } from './ResultsCard';
import { sleep } from 'src/utils/sleep';
+import { ResultsCardDetail } from './ResultsCard';
export const PrintResults = ({
packetsSent,
@@ -30,7 +30,7 @@ export const PrintResults = ({
asyncPrint();
window.addEventListener('afterprint', OnPrintRequestComplete);
- () => window.removeEventListener('afterprint', OnPrintRequestComplete);
+ return () => window.removeEventListener('afterprint', OnPrintRequestComplete);
}, []);
return (
diff --git a/nym-wallet/src/components/TestNode/Results.tsx b/nym-wallet/src/components/TestNode/Results.tsx
index 0ed14a814c..58856801b3 100644
--- a/nym-wallet/src/components/TestNode/Results.tsx
+++ b/nym-wallet/src/components/TestNode/Results.tsx
@@ -1,7 +1,6 @@
import React from 'react';
+import { TestStatus } from '@nymproject/sdk';
import { Grid } from '@mui/material';
-
-import { TestStatus } from 'src/pages/bonding/node-settings/node-test/types';
import { Packets } from './Packets';
import { NodeScore } from './NodeScore';
import { Overview } from './Overview';
diff --git a/nym-wallet/src/pages/bonding/node-settings/node-test/__mocks__.ts b/nym-wallet/src/pages/bonding/node-settings/node-test/__mocks__.ts
deleted file mode 100644
index c7a846d87a..0000000000
--- a/nym-wallet/src/pages/bonding/node-settings/node-test/__mocks__.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { WasmGateway, WasmMixNode, WasmNymTopology } from 'nym-client-wasm';
-
-export const createDummyTopology = () => {
- const l1Mixnode = new WasmMixNode(
- 1,
- 'n1fzv4jc7fanl9s0qj02ge2ezk3kts545kjtek47',
- '178.79.143.65',
- 1789,
- '4Yr4qmEHd9sgsuQ83191FR2hD88RfsbMmB4tzhhZWriz',
- '8ndjk5oZ6HxUZNScLJJ7hk39XtUqGexdKgW7hSX6kpWG',
- 1,
- '1.10.0',
- );
-
- const l2Mixnode = new WasmMixNode(
- 2,
- 'n1z93z44vf8ssvdhujjvxcj4rd5e3lz0l60wdk70',
- '109.74.197.180',
- 1789,
- '7sVjiMrPYZrDWRujku9QLxgE8noT7NTgBAqizCsu7AoK',
- 'GepXwRnKZDd8x2nBWAajGGBVvF3mrpVMQBkgfrGuqRCN',
- 2,
- '1.10.0',
- );
-
- const l3Mixnode = new WasmMixNode(
- 3,
- 'n1ptg680vnmef2cd8l0s9uyc4f0hgf3x8sed6w77',
- '176.58.101.80',
- 1789,
- 'FoM5Mx9Pxk1g3zEqkS3APgtBeTtTo3M8k7Yu4bV6kK1R',
- 'DeYjrDC2AcQRVFshiKnbUo6bRvPyZ33QGYR2DLeFJ9qD',
- 3,
- '1.10.0',
- );
-
- const gateway = new WasmGateway(
- 'n16evnn8glr0sham3matj8rg2s24m6x56ayk87ts',
- '85.159.212.96',
- 1789,
- 9000,
- '336yuXAeGEgedRfqTJZsG2YV7P13QH1bHv1SjCZYarc9',
- 'BtYjoWihiuFihGKQypmpSspbhmWDPxzqeTVSd8ciCpWL',
- '1.10.1',
- );
-
- const mixnodes = new Map();
- mixnodes.set(1, [l1Mixnode]);
- mixnodes.set(2, [l2Mixnode]);
- mixnodes.set(3, [l3Mixnode]);
-
- const gateways = [gateway];
-
- return new WasmNymTopology(mixnodes, gateways);
-};
diff --git a/nym-wallet/src/pages/bonding/node-settings/node-test/index.tsx b/nym-wallet/src/pages/bonding/node-settings/node-test/index.tsx
index e141d5f69c..7670fe1dcd 100644
--- a/nym-wallet/src/pages/bonding/node-settings/node-test/index.tsx
+++ b/nym-wallet/src/pages/bonding/node-settings/node-test/index.tsx
@@ -1,19 +1,20 @@
-import React, { useContext, useEffect, useRef, useState } from 'react';
+import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
import { Box, Button } from '@mui/material';
+import { Download } from '@mui/icons-material';
+import { NodeTestResultResponse, NodeTester, TestStatus, createNodeTesterClient } from '@nymproject/sdk';
+import { format } from 'date-fns';
import { AppContext, useBondingContext } from 'src/context';
import { LoadingModal } from 'src/components/Modals/LoadingModal';
import { Results } from 'src/components/TestNode/Results';
import { ErrorModal } from 'src/components/Modals/ErrorModal';
import { PrintResults } from 'src/components/TestNode/PrintResults';
-import { Download } from '@mui/icons-material';
-import { format } from 'date-fns';
-import { NodeTestEvent, NodeTestResult, TestStatus } from './types';
+import { MAINNET_VALIDATOR_URL, QA_VALIDATOR_URL } from 'src/constants';
export const NodeTestPage = () => {
- const [nodeTestWorker, setNodeTestWorker] = useState();
+ const [nodeTestClient, setNodeTestClient] = useState();
const [error, setError] = useState();
const [isLoading, setIsLoading] = useState(false);
- const [results, setResults] = useState();
+ const [results, setResults] = useState();
const [printResults, setPrintResults] = useState(false);
const [testDate, setTestDate] = useState();
@@ -23,15 +24,6 @@ export const NodeTestPage = () => {
const { network } = useContext(AppContext);
const { bondedNode } = useBondingContext();
- const loadWorker = () => {
- try {
- const worker: Worker = new Worker(new URL('./worker.ts', import.meta.url));
- setNodeTestWorker(worker);
- } catch (e) {
- setError('Error loading worker');
- }
- };
-
const handleTestTimeout = () => {
clearTimeout(timerRef.current);
timerRef.current = setTimeout(() => {
@@ -43,56 +35,52 @@ export const NodeTestPage = () => {
}, 15000);
};
- const handleWorkerMessages = (ev: MessageEvent) => {
- const eventKind = ev.data.kind;
-
- if (eventKind === 'Error') {
- setError(ev.data.args.message);
- testStateRef.current = 'Stopped';
- }
- if (eventKind === 'DisplayTesterResults') {
- setResults(ev.data.args.result);
- testStateRef.current = 'Complete';
- }
- setIsLoading(false);
- };
-
const handleTestNode = async () => {
- setError(undefined);
- setResults(undefined);
- setIsLoading(true);
- setTestDate(format(new Date(), 'dd/MM/yyyy HH:mm'));
-
- if (nodeTestWorker) {
+ if (nodeTestClient && bondedNode) {
+ setResults(undefined);
+ setTestDate(format(new Date(), 'dd/MM/yyyy HH:mm'));
+ setIsLoading(true);
+ setError(undefined);
testStateRef.current = 'Running';
- nodeTestWorker.postMessage({
- kind: 'TestPacket',
- args: {
- mixnodeIdentity: bondedNode?.identityKey,
- network,
- },
- } as NodeTestEvent);
handleTestTimeout();
+ try {
+ const result = await nodeTestClient.tester.startTest(bondedNode.identityKey);
+ setResults(result);
+ testStateRef.current = 'Complete';
+ } catch (e) {
+ setError('Node test failed, please try again');
+ testStateRef.current = 'Stopped';
+ console.log(e);
+ } finally {
+ setIsLoading(false);
+ }
}
};
- useEffect(() => {
- loadWorker();
-
- return () => {
- if (nodeTestWorker) {
- nodeTestWorker.terminate();
- }
- };
+ const loadNodeTestClient = useCallback(async () => {
+ try {
+ const nodeTesterId = new Date().toISOString(); // make a new tester id for each session
+ const validator = network === 'MAINNET' ? MAINNET_VALIDATOR_URL : QA_VALIDATOR_URL;
+ const client = await createNodeTesterClient();
+ await client.tester.init(validator, nodeTesterId);
+ setNodeTestClient(client);
+ } catch (e) {
+ console.log(e);
+ setError('Failed to load node tester client, please try again');
+ }
}, []);
useEffect(() => {
- if (nodeTestWorker) {
- nodeTestWorker.addEventListener('message', (e) => handleWorkerMessages(e));
- }
+ loadNodeTestClient();
- return () => nodeTestWorker?.removeEventListener('message', handleWorkerMessages);
- }, [nodeTestWorker]);
+ return () => {
+ clearTimeout(timerRef.current);
+ if (nodeTestClient) {
+ nodeTestClient.tester.disconnectFromGateway();
+ nodeTestClient.terminate();
+ }
+ };
+ }, [loadNodeTestClient]);
return (
diff --git a/nym-wallet/src/pages/bonding/node-settings/node-test/types.ts b/nym-wallet/src/pages/bonding/node-settings/node-test/types.ts
deleted file mode 100644
index a15abf8620..0000000000
--- a/nym-wallet/src/pages/bonding/node-settings/node-test/types.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { Network } from 'src/types';
-
-export type NodeTestResult = {
- score: number;
- sentPackets: number;
- receivedPackets: number;
- receivedAcks: number;
- duplicatePackets: number;
- duplicateAcks: number;
-};
-
-type Error = {
- kind: 'Error';
- args: { message: string };
-};
-
-type WorkerLoaded = {
- kind: 'WorkerLoaded';
-};
-
-type DisplayTesterResults = {
- kind: 'DisplayTesterResults';
- args: {
- result: NodeTestResult;
- };
-};
-
-type TestPacket = {
- kind: 'TestPacket';
- args: {
- mixnodeIdentity: string;
- network: Network;
- };
-};
-
-export type TestStatus = 'Stopped' | 'Running' | 'Complete';
-
-export type NodeTestEvent = Error | DisplayTesterResults | TestPacket | WorkerLoaded;
diff --git a/nym-wallet/src/pages/bonding/node-settings/node-test/worker.ts b/nym-wallet/src/pages/bonding/node-settings/node-test/worker.ts
deleted file mode 100644
index 61c8b18bb9..0000000000
--- a/nym-wallet/src/pages/bonding/node-settings/node-test/worker.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2020-2023 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.
-
-/* eslint-disable no-restricted-globals */
-import { NymNodeTester, set_panic_hook, current_network_topology, NodeTestResult } from 'nym-client-wasm';
-import { Network } from 'src/types';
-import { NodeTestEvent } from './types';
-import { MAINNET_VALIDATOR_URL, QA_VALIDATOR_URL } from 'src/constants';
-
-console.log('Initializing worker');
-
-const postMessage = (data: NodeTestEvent) => self.postMessage(data);
-
-postMessage({
- kind: 'WorkerLoaded',
-});
-
-const printAndDisplayTestResult = (result: NodeTestResult) => {
- result.log_details();
-
- postMessage({
- kind: 'DisplayTesterResults',
- args: {
- result: {
- score: result.score(),
- sentPackets: result.sent_packets,
- receivedPackets: result.received_packets,
- receivedAcks: result.received_acks,
- duplicatePackets: result.duplicate_packets,
- duplicateAcks: result.duplicate_acks,
- },
- },
- });
-};
-
-const buildTester = async (network: Network) => {
- const validator = network === 'QA' ? QA_VALIDATOR_URL : MAINNET_VALIDATOR_URL;
- const topology = await current_network_topology(validator);
- const nodeTester = await new NymNodeTester(topology, network);
-
- return nodeTester;
-};
-
-async function testNode() {
- self.onmessage = async (event: MessageEvent) => {
- const eventKind = event.data.kind;
-
- switch (eventKind) {
- case 'TestPacket': {
- const { mixnodeIdentity, network } = event.data.args;
- const nodeTester = await buildTester(network);
-
- try {
- console.log(`Testing mixnode identity: ${mixnodeIdentity}, on network: ${network}.`);
- const result = await nodeTester.test_node(mixnodeIdentity);
-
- printAndDisplayTestResult(result);
-
- await nodeTester.disconnect_from_gateway();
- console.log('Disconnected from gateway');
- } catch (e) {
- const errorMessage = e instanceof Error ? e.message : 'Node test error';
- console.log(errorMessage);
-
- nodeTester.disconnect_from_gateway();
-
- postMessage({
- kind: 'Error',
- args: { message: errorMessage },
- });
- }
- break;
- }
- default:
- return undefined;
- }
-
- return undefined;
- };
-}
-
-async function main() {
- // sets up better stack traces in case of in-rust panics
- set_panic_hook();
-
- // run test on simplified and dedicated tester:
- await testNode();
-}
-
-// Let's get started!
-main();
diff --git a/package.json b/package.json
index 95b111b2f1..58d32165d3 100644
--- a/package.json
+++ b/package.json
@@ -10,14 +10,14 @@
"nym-connect/**",
"explorer",
"types",
- "clients/validator",
- "clients/webassembly/**"
+ "clients/validator"
],
"scripts": {
"clean": "lerna run clean",
"build": "run-s build:types build:packages",
"build:types": "lerna run --scope @nymproject/types build --stream",
- "build:packages": "run-s build:packages:theme build:packages:react",
+ "build:packages": "run-s build:packages:theme build:packages:react build:packages:sdk",
+ "build:packages:sdk": "lerna run --scope @nymproject/sdk build:lint",
"build:packages:theme": "lerna run --scope @nymproject/mui-theme build",
"build:packages:react": "lerna run --scope @nymproject/react build",
"build:react-example": "lerna run --scope @nymproject/react-webpack-with-theme-example build --stream",
@@ -28,7 +28,9 @@
"lint:fix": "lerna run lint:fix --stream",
"tsc": "lerna run tsc --stream",
"types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app",
- "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run"
+ "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run",
+ "preinstall": "yarn install:copy-placeholders",
+ "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm"
},
"devDependencies": {
"lerna": "^6.6.2",
diff --git a/scripts/build/yarn/wasm-placeholder/package.json b/scripts/build/yarn/wasm-placeholder/package.json
new file mode 100644
index 0000000000..50f57bc30d
--- /dev/null
+++ b/scripts/build/yarn/wasm-placeholder/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "@nymproject/nym-client-wasm",
+ "version": "1.0.0",
+ "sideEffects": false
+}
diff --git a/sdk/typescript/.eslintrc.js b/sdk/typescript/.eslintrc.js
index 040935b3bd..52bd4fe9a9 100644
--- a/sdk/typescript/.eslintrc.js
+++ b/sdk/typescript/.eslintrc.js
@@ -27,7 +27,7 @@ module.exports = {
'plugin:jest/recommended',
'plugin:jest/style',
],
- ignorePatterns: ['dist/**/*', 'dist', 'node_modules', '**/wasm/worker.js'],
+ ignorePatterns: ['dist/**/*', 'dist', 'node_modules', '**/worker.js'],
rules: {
'jest/prefer-strict-equal': 'error',
'jest/prefer-to-have-length': 'warn',
diff --git a/sdk/typescript/examples/node-tester/plain-html/.babelrc b/sdk/typescript/examples/node-tester/plain-html/.babelrc
new file mode 100644
index 0000000000..85e1f1ba26
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/env", "@babel/react"]
+}
\ No newline at end of file
diff --git a/sdk/typescript/examples/node-tester/plain-html/README.md b/sdk/typescript/examples/node-tester/plain-html/README.md
new file mode 100644
index 0000000000..a255725316
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/README.md
@@ -0,0 +1,14 @@
+# HTML Nyn Node Test
+
+This is an example of using the Nym Mixnet node tester.
+
+You can use this example as a seed for a new project.
+
+## Running the example
+
+Try out the node tester app by running:
+
+```
+npm install
+npm start
+```
diff --git a/sdk/typescript/examples/node-tester/plain-html/jest.config.js b/sdk/typescript/examples/node-tester/plain-html/jest.config.js
new file mode 100644
index 0000000000..e86e13bab9
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/jest.config.js
@@ -0,0 +1,5 @@
+/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
+module.exports = {
+ preset: 'ts-jest',
+ testEnvironment: 'node',
+};
diff --git a/sdk/typescript/examples/node-tester/plain-html/package.json b/sdk/typescript/examples/node-tester/plain-html/package.json
new file mode 100644
index 0000000000..a3befe83ea
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "@nymproject/sdk-example-node-tester-plain-html",
+ "description": "An example project that uses WASM node tester and plain HTML",
+ "version": "1.0.0",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@babel/core": "^7.15.0",
+ "@babel/plugin-transform-async-to-generator": "^7.14.5",
+ "@babel/preset-env": "^7.15.0",
+ "@babel/preset-typescript": "^7.15.0",
+ "@types/jest": "^27.0.1",
+ "@types/node": "^16.7.13",
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
+ "@typescript-eslint/parser": "^5.13.0",
+ "babel-loader": "^8.3.0",
+ "babel-plugin-root-import": "^5.1.0",
+ "clean-webpack-plugin": "^4.0.0",
+ "css-loader": "^6.7.3",
+ "css-minimizer-webpack-plugin": "^3.0.2",
+ "dotenv-webpack": "^7.0.3",
+ "eslint": "^8.10.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-airbnb-typescript": "^16.1.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-import-resolver-root-import": "^1.0.4",
+ "eslint-plugin-import": "^2.25.4",
+ "eslint-plugin-jest": "^26.1.1",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-prettier": "^4.0.0",
+ "file-loader": "^6.2.0",
+ "fork-ts-checker-webpack-plugin": "^7.2.1",
+ "html-webpack-plugin": "^5.3.2",
+ "jest": "^27.1.0",
+ "mini-css-extract-plugin": "^2.2.2",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.8.7",
+ "style-loader": "^3.3.1",
+ "thread-loader": "^3.0.4",
+ "ts-jest": "^27.0.5",
+ "ts-loader": "^9.4.2",
+ "tsconfig-paths-webpack-plugin": "^3.5.2",
+ "typescript": "^4.6.2",
+ "url-loader": "^4.1.1",
+ "webpack": "^5.75.0",
+ "webpack-cli": "^4.8.0",
+ "webpack-dev-server": "^4.5.0",
+ "webpack-merge": "^5.8.0"
+ },
+ "scripts": {
+ "start": "webpack serve --progress --port 3000",
+ "build": "webpack build --progress --config webpack.prod.js",
+ "build:dev": "webpack build --progress",
+ "build:serve": "npx serve dist",
+ "test": "jest",
+ "test:watch": "jest --watch",
+ "tsc": "tsc",
+ "tsc:watch": "tsc --watch",
+ "lint": "eslint src",
+ "lint:fix": "eslint src --fix"
+ }
+}
diff --git a/sdk/typescript/examples/node-tester/plain-html/src/index.html b/sdk/typescript/examples/node-tester/plain-html/src/index.html
new file mode 100644
index 0000000000..ccac6e2365
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/src/index.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ Nym WebAssembly Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+Test a mixnode by entering the mixnode id above and click the Test button
+
+
+
+
+
+
+
+
diff --git a/sdk/typescript/examples/node-tester/plain-html/src/index.ts b/sdk/typescript/examples/node-tester/plain-html/src/index.ts
new file mode 100644
index 0000000000..a2946ba079
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/src/index.ts
@@ -0,0 +1,116 @@
+import { createNodeTesterClient, NodeTester } from '@nymproject/sdk';
+
+let nodeTester: NodeTester | null = null;
+
+/**
+ * Display messages that have been sent up the websocket. Colours them blue.
+ *
+ * @param {string} message
+ */
+function displayOutput(message: string, color?: string) {
+ const timestamp = new Date().toISOString().substr(11, 12);
+
+ const sendDiv = document.createElement('div');
+ const paragraph = document.createElement('p');
+ paragraph.setAttribute('style', `color: ${color || 'blue'}`);
+ const paragraphContent = document.createTextNode(`${timestamp} >>> ${message}`);
+ paragraph.appendChild(paragraphContent);
+
+ sendDiv.appendChild(paragraph);
+ document.getElementById('output')?.appendChild(sendDiv);
+}
+
+/**
+ * The main entry point
+ */
+async function main() {
+ nodeTester = await createNodeTesterClient();
+
+ // add node tester to the Window globally, so that it can be used from the dev tools console
+ (window as any).nodeTester = nodeTester;
+
+ if (!nodeTester) {
+ console.error('Oh no! Could not the node test');
+ return;
+ }
+
+ const nymApiUrl = 'https://validator.nymtech.net/api';
+ const nodeTesterId = new Date().toISOString(); // make a new tester id for each session
+ await nodeTester.tester.init(nymApiUrl, nodeTesterId);
+
+ const mixnodes = await (await fetch(`${nymApiUrl}/v1/mixnodes/active`)).json();
+
+ const exampleMixnodeIdentityKey = mixnodes[0].bond_information.mix_node.identity_key;
+
+ const sendButton: HTMLButtonElement = document.querySelector('#send-button') as HTMLButtonElement;
+ const reconnectButton: HTMLButtonElement = document.querySelector('#reconnect-button') as HTMLButtonElement;
+ const disconnectButton: HTMLButtonElement = document.querySelector('#disconnect-button') as HTMLButtonElement;
+ const terminateButton: HTMLButtonElement = document.querySelector('#terminate-button') as HTMLButtonElement;
+
+ const mixnodeIdInput = document.getElementById('mixnodeId') as HTMLFormElement;
+
+ mixnodeIdInput.value = exampleMixnodeIdentityKey;
+
+ reconnectButton.onclick = async function () {
+ try {
+ await nodeTester?.tester.reconnectToGateway();
+ } catch (e: any) {
+ console.error('Error', e);
+ displayOutput(`ERROR: ${e.message}`, 'red');
+ }
+ };
+
+ disconnectButton.onclick = async function () {
+ try {
+ await nodeTester?.tester.disconnectFromGateway();
+ } catch (e: any) {
+ console.error('Error', e);
+ displayOutput(`ERROR: ${e.message}`, 'red');
+ }
+ };
+
+ terminateButton.onclick = async function () {
+ try {
+ await nodeTester?.terminate();
+ } catch (e: any) {
+ console.error('Error', e);
+ displayOutput(`ERROR: ${e.message}`, 'red');
+ }
+ };
+
+ if (sendButton) {
+ sendButton.onclick = async function () {
+ const mixnodeId = mixnodeIdInput.value;
+ if (!nodeTester) {
+ displayOutput('ERROR: The node tester is not defined');
+ console.error('The node tester is not defined');
+ return;
+ }
+ if (!mixnodeId) {
+ displayOutput('ERROR: No mix id specified');
+ console.error('No mix id specified');
+ return;
+ }
+
+ if (nodeTester && mixnodeId) {
+ displayOutput('Starting test...');
+ try {
+ const response = await nodeTester.tester.startTest(mixnodeId);
+ displayOutput('Done!');
+ if (response) {
+ displayOutput(JSON.stringify(response, null, 2), 'green');
+ }
+ } catch (e: any) {
+ console.error('Error', e);
+ displayOutput(`ERROR: ${e.message}`, 'red');
+ }
+ }
+ };
+ }
+}
+
+// wait for the html to load
+window.addEventListener('DOMContentLoaded', () => {
+ // let's do this!
+ main();
+});
diff --git a/sdk/typescript/examples/node-tester/plain-html/tsconfig.json b/sdk/typescript/examples/node-tester/plain-html/tsconfig.json
new file mode 100644
index 0000000000..86902367db
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "outDir": "./dist"
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx"],
+ "exclude": ["node_modules", "build", "dist"]
+}
diff --git a/sdk/typescript/examples/node-tester/plain-html/tsconfig.prod.json b/sdk/typescript/examples/node-tester/plain-html/tsconfig.prod.json
new file mode 100644
index 0000000000..cd04ae7aed
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/tsconfig.prod.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "outDir": "./dist",
+ "declaration": false
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx"],
+ "exclude": ["node_modules", "build", "dist", "**/*.stories.*", "**/*.test.*", "**/*.spec.*"]
+}
diff --git a/sdk/typescript/examples/node-tester/plain-html/webpack.common.js b/sdk/typescript/examples/node-tester/plain-html/webpack.common.js
new file mode 100644
index 0000000000..ae6ef6dc8e
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/webpack.common.js
@@ -0,0 +1,30 @@
+const path = require('path');
+const { mergeWithRules } = require('webpack-merge');
+const { webpackCommon } = require('../../.webpack/webpack.base');
+
+module.exports = mergeWithRules({
+ module: {
+ rules: {
+ test: 'match',
+ use: 'replace',
+ },
+ },
+})(
+ webpackCommon(__dirname, [
+ {
+ inject: true,
+ filename: 'index.html',
+ template: path.resolve(__dirname, 'src/index.html'),
+ chunks: ['index'],
+ },
+ ]),
+ {
+ entry: {
+ index: path.resolve(__dirname, 'src/index.ts'),
+ },
+ output: {
+ path: path.resolve(__dirname, 'dist'),
+ publicPath: '/',
+ },
+ },
+);
diff --git a/sdk/typescript/examples/node-tester/plain-html/webpack.config.js b/sdk/typescript/examples/node-tester/plain-html/webpack.config.js
new file mode 100644
index 0000000000..8c7288de81
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/webpack.config.js
@@ -0,0 +1,67 @@
+const { mergeWithRules } = require('webpack-merge');
+const webpack = require('webpack');
+const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
+const ReactRefreshTypeScript = require('react-refresh-typescript');
+const commonConfig = require('./webpack.common');
+
+module.exports = mergeWithRules({
+ module: {
+ rules: {
+ test: 'match',
+ use: 'replace',
+ },
+ },
+})(commonConfig, {
+ mode: 'development',
+ devtool: 'inline-source-map',
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ use: 'ts-loader',
+ exclude: /node_modules/,
+ options: {
+ getCustomTransformers: () => ({
+ before: [ReactRefreshTypeScript()],
+ }),
+ // `ts-loader` does not work with HMR unless `transpileOnly` is used.
+ // If you need type checking, `ForkTsCheckerWebpackPlugin` is an alternative.
+ transpileOnly: true,
+ },
+ },
+ ],
+ },
+ plugins: [
+ new ReactRefreshWebpackPlugin(),
+
+ // this can be included automatically by the dev server, however build mode fails if missing
+ new webpack.HotModuleReplacementPlugin(),
+ ],
+
+ target: 'web',
+
+ devServer: {
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
+ },
+ historyApiFallback: true,
+ },
+
+ // recommended for faster rebuild
+ optimization: {
+ runtimeChunk: true,
+ removeAvailableModules: false,
+ removeEmptyChunks: false,
+ splitChunks: false,
+ },
+
+ cache: {
+ type: 'filesystem',
+ buildDependencies: {
+ // restart on config change
+ config: ['./webpack.config.js'],
+ },
+ },
+});
diff --git a/sdk/typescript/examples/node-tester/plain-html/webpack.prod.js b/sdk/typescript/examples/node-tester/plain-html/webpack.prod.js
new file mode 100644
index 0000000000..c92239179a
--- /dev/null
+++ b/sdk/typescript/examples/node-tester/plain-html/webpack.prod.js
@@ -0,0 +1,42 @@
+const { mergeWithRules } = require('webpack-merge');
+const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const commonConfig = require('./webpack.common');
+
+module.exports = mergeWithRules({
+ module: {
+ rules: {
+ test: 'match',
+ use: 'replace',
+ },
+ },
+})(commonConfig, {
+ mode: 'production',
+
+ // TODO: no source maps, add back
+ devtool: false,
+
+ module: {
+ rules: [
+ {
+ test: /\.css$/,
+ use: [MiniCssExtractPlugin.loader, 'css-loader'],
+ },
+ ],
+ },
+ optimization: {
+ minimizer: ['...', new CssMinimizerPlugin()],
+ splitChunks: {
+ chunks: 'all',
+ },
+ },
+ plugins: [
+ new MiniCssExtractPlugin({
+ filename: '[name].[contenthash].css',
+ }),
+ ],
+ output: {
+ pathinfo: false,
+ filename: '[name].[contenthash].js',
+ },
+});
diff --git a/sdk/typescript/examples/plain-html/tsconfig.prod.json b/sdk/typescript/examples/plain-html/tsconfig.prod.json
index ea260ca2f9..2e8a618c0f 100644
--- a/sdk/typescript/examples/plain-html/tsconfig.prod.json
+++ b/sdk/typescript/examples/plain-html/tsconfig.prod.json
@@ -1,20 +1,10 @@
{
- "extends": "../tsconfig.json",
+ "extends": "../../tsconfig.json",
"compilerOptions": {
"jsx": "react-jsx",
"outDir": "./dist",
"declaration": false
},
- "include": [
- "src/**/*.ts",
- "src/**/*.tsx"
- ],
- "exclude": [
- "node_modules",
- "build",
- "dist",
- "**/*.stories.*",
- "**/*.test.*",
- "**/*.spec.*"
- ]
+ "include": ["src/**/*.ts", "src/**/*.tsx"],
+ "exclude": ["node_modules", "build", "dist", "**/*.stories.*", "**/*.test.*", "**/*.spec.*"]
}
diff --git a/sdk/typescript/packages/sdk/.gitignore b/sdk/typescript/packages/sdk/.gitignore
index f2883f65bd..6166d37c02 100644
--- a/sdk/typescript/packages/sdk/.gitignore
+++ b/sdk/typescript/packages/sdk/.gitignore
@@ -1 +1,2 @@
src/mixnet/wasm/worker.js
+src/mixnet/node-tester/worker.js
\ No newline at end of file
diff --git a/sdk/typescript/packages/sdk/package.json b/sdk/typescript/packages/sdk/package.json
index 7b05d365af..7b2b512f37 100644
--- a/sdk/typescript/packages/sdk/package.json
+++ b/sdk/typescript/packages/sdk/package.json
@@ -26,10 +26,12 @@
"build:only-this": "scripts/build-prod.sh",
"prebuild:dev": "yarn build:dependencies",
"build:dev": "yarn build:dev:only-this",
- "build:dev:only-this": "scripts/build.sh"
+ "build:dev:only-this": "scripts/build.sh",
+ "build:lint": "run-s build:dependencies:nym-client-wasm build:dev:only-this"
},
"dependencies": {
"@npmcli/node-gyp": "^3.0.0",
+ "@nymproject/nym-client-wasm": "1",
"comlink": "^4.3.1",
"lerna": "^6.6.2",
"node-gyp": "^9.3.1"
diff --git a/sdk/typescript/packages/sdk/rollup-cjs.config.mjs b/sdk/typescript/packages/sdk/rollup-cjs.config.mjs
index fdd081ab49..9f6d102d3d 100644
--- a/sdk/typescript/packages/sdk/rollup-cjs.config.mjs
+++ b/sdk/typescript/packages/sdk/rollup-cjs.config.mjs
@@ -3,9 +3,7 @@ import resolve from '@rollup/plugin-node-resolve';
import { wasm } from '@rollup/plugin-wasm';
import webWorkerLoader from 'rollup-plugin-web-worker-loader';
-const extensions = [
- '.js', '.jsx', '.ts', '.tsx',
-];
+const extensions = ['.js', '.jsx', '.ts', '.tsx'];
export default {
input: 'src/index.ts',
@@ -17,6 +15,9 @@ export default {
webWorkerLoader({ targetPlatform: 'browser', inline: true }),
resolve({ extensions }),
wasm({ maxFileSize: 10000000, targetEnv: 'browser' }),
- typescript({ compilerOptions: { outDir: 'dist/cjs', target: 'es5' }, exclude: 'mixnet/wasm/worker.ts', }),
+ typescript({
+ compilerOptions: { outDir: 'dist/cjs', target: 'es5' },
+ exclude: ['mixnet/wasm/worker.ts', 'mixnet/node-tester/worker.ts'],
+ }),
],
};
diff --git a/sdk/typescript/packages/sdk/rollup-esm.config.mjs b/sdk/typescript/packages/sdk/rollup-esm.config.mjs
index 546188a9c3..3ad4c148fc 100644
--- a/sdk/typescript/packages/sdk/rollup-esm.config.mjs
+++ b/sdk/typescript/packages/sdk/rollup-esm.config.mjs
@@ -2,9 +2,7 @@ import typescript from '@rollup/plugin-typescript';
import resolve from '@rollup/plugin-node-resolve';
import webWorkerLoader from 'rollup-plugin-web-worker-loader';
-const extensions = [
- '.js', '.jsx', '.ts', '.tsx',
-];
+const extensions = ['.js', '.jsx', '.ts', '.tsx'];
export default {
input: 'src/index.ts',
@@ -15,6 +13,9 @@ export default {
plugins: [
webWorkerLoader({ targetPlatform: 'browser', inline: true }),
resolve({ extensions }),
- typescript({ exclude: 'mixnet/wasm/worker.ts', compilerOptions: { outDir: 'dist/esm' } }),
+ typescript({
+ exclude: ['mixnet/wasm/worker.ts', 'mixnet/node-tester/worker.ts'],
+ compilerOptions: { outDir: 'dist/esm' },
+ }),
],
};
diff --git a/sdk/typescript/packages/sdk/rollup-node-tester-worker.config.mjs b/sdk/typescript/packages/sdk/rollup-node-tester-worker.config.mjs
new file mode 100644
index 0000000000..5f18e7ce33
--- /dev/null
+++ b/sdk/typescript/packages/sdk/rollup-node-tester-worker.config.mjs
@@ -0,0 +1,26 @@
+import typescript from '@rollup/plugin-typescript';
+import resolve from '@rollup/plugin-node-resolve';
+import { wasm } from '@rollup/plugin-wasm';
+import replace from '@rollup/plugin-replace';
+
+const extensions = ['.js', '.jsx', '.ts', '.tsx'];
+
+export default {
+ input: 'src/mixnet/node-tester/worker.ts',
+ output: {
+ dir: 'dist',
+ format: 'cjs',
+ },
+ plugins: [
+ resolve({ extensions }),
+ // this is some nasty monkey patching that removes the WASM URL (because it is handled by the `wasm` plugin)
+ replace({
+ values: { "input = new URL('nym_client_wasm_bg.wasm', import.meta.url);": 'input = undefined;' },
+ delimiters: ['', ''],
+ preventAssignment: true,
+ }),
+ // force the wasm plugin to embed the wasm bundle - this means no downstream bundlers have to worry about handling it
+ wasm({ maxFileSize: 10000000, targetEnv: 'browser' }),
+ typescript({ compilerOptions: { declaration: false, target: 'es5' } }),
+ ],
+};
diff --git a/sdk/typescript/packages/sdk/scripts/build.sh b/sdk/typescript/packages/sdk/scripts/build.sh
index 8440a3adda..d2763969e7 100755
--- a/sdk/typescript/packages/sdk/scripts/build.sh
+++ b/sdk/typescript/packages/sdk/scripts/build.sh
@@ -7,7 +7,7 @@ set -o pipefail
rm -rf dist || true
#-------------------------------------------------------
-# WEB WORKER
+# WEB WORKER (WASM client)
#-------------------------------------------------------
# The web worker needs to be bundled because the WASM bundle needs to be loaded synchronously and all dependencies
# must be included in the worker script (because it is not loaded as an ES Module)
@@ -19,6 +19,19 @@ rollup -c rollup-worker.config.mjs
rm -f src/mixnet/wasm/worker.js
mv dist/worker.js src/mixnet/wasm/worker.js
+#-------------------------------------------------------
+# WEB WORKER (Node tester)
+#-------------------------------------------------------
+# The web worker needs to be bundled because the WASM bundle needs to be loaded synchronously and all dependencies
+# must be included in the worker script (because it is not loaded as an ES Module)
+
+# build the worker
+rollup -c rollup-node-tester-worker.config.mjs
+
+# move it next to the Typescript `mixnet/node-tester/index.ts` so it can be inlined by rollup
+rm -f src/mixnet/node-tester/worker.js
+mv dist/worker.js src/mixnet/node-tester/worker.js
+
#-------------------------------------------------------
# ESM
#-------------------------------------------------------
diff --git a/sdk/typescript/packages/sdk/src/mixnet/index.ts b/sdk/typescript/packages/sdk/src/mixnet/index.ts
index 3c4c661762..2fb66914e6 100644
--- a/sdk/typescript/packages/sdk/src/mixnet/index.ts
+++ b/sdk/typescript/packages/sdk/src/mixnet/index.ts
@@ -1,2 +1,4 @@
export * from './wasm';
export * from './wasm/types';
+export * from './node-tester';
+export * from './node-tester/types';
diff --git a/sdk/typescript/packages/sdk/src/mixnet/node-tester/constants.ts b/sdk/typescript/packages/sdk/src/mixnet/node-tester/constants.ts
new file mode 100644
index 0000000000..55770cd39b
--- /dev/null
+++ b/sdk/typescript/packages/sdk/src/mixnet/node-tester/constants.ts
@@ -0,0 +1,5 @@
+const QA_VALIDATOR_URL = 'https://qa-nym-api.qa.nymte.ch/api';
+const QWERTY_VALIDATOR_URL = 'https://qwerty-validator-api.qa.nymte.ch/api';
+const MAINNET_VALIDATOR_URL = 'https://validator.nymtech.net/api/';
+
+export { QA_VALIDATOR_URL, QWERTY_VALIDATOR_URL, MAINNET_VALIDATOR_URL };
diff --git a/sdk/typescript/packages/sdk/src/mixnet/node-tester/index.ts b/sdk/typescript/packages/sdk/src/mixnet/node-tester/index.ts
new file mode 100644
index 0000000000..04e52ee579
--- /dev/null
+++ b/sdk/typescript/packages/sdk/src/mixnet/node-tester/index.ts
@@ -0,0 +1,50 @@
+import InlineWasmWebWorker from 'web-worker:./worker';
+import * as Comlink from 'comlink';
+import { INodeTesterWorkerAsync, NodeTester, NodeTesterEventKinds } from './types';
+
+/**
+ * Client for the Nym node tester.
+ */
+export const createNodeTesterClient = async (): Promise => {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ const worker = await createWorker();
+
+ // let comlink handle interop with the web worker
+ const tester = Comlink.wrap(worker);
+
+ // expose the method to terminate the worker
+ const terminate = async () => {
+ worker.terminate();
+ };
+
+ return { tester, terminate };
+};
+
+/**
+ * Async method to create a web worker that runs the Nym node tester client on another thread. It will only return once the worker
+ * has passed back a `Loaded` event to the calling thread.
+ *
+ * @return The instance of the web worker.
+ */
+
+const createWorker = async () =>
+ new Promise((resolve, reject) => {
+ // rollup will inline the built worker script, so that when the SDK is used in
+ // other projects, they will not need to mess around trying to bundle it
+ // however, it will make this SDK bundle bigger because of Base64 inline data
+ const worker = new InlineWasmWebWorker();
+
+ worker.addEventListener('error', reject);
+ worker.addEventListener(
+ 'message',
+ (msg) => {
+ worker.removeEventListener('error', reject);
+ if (msg.data?.kind === NodeTesterEventKinds.Loaded) {
+ resolve(worker);
+ } else {
+ reject(msg);
+ }
+ },
+ { once: true },
+ );
+ });
diff --git a/sdk/typescript/packages/sdk/src/mixnet/node-tester/types.ts b/sdk/typescript/packages/sdk/src/mixnet/node-tester/types.ts
new file mode 100644
index 0000000000..a556fec243
--- /dev/null
+++ b/sdk/typescript/packages/sdk/src/mixnet/node-tester/types.ts
@@ -0,0 +1,65 @@
+export interface INodeTesterWorkerAsync {
+ init: (validatorUrl: string, nodeTesterId?: string) => Promise;
+ reconnectToGateway: () => Promise;
+ disconnectFromGateway: () => Promise;
+ startTest: (mixnodeIdentityKey: string) => Promise;
+}
+
+export interface INodeTesterWorkerDisposableAsync {
+ terminate: () => Promise;
+}
+
+export interface NodeTester extends INodeTesterWorkerDisposableAsync {
+ tester: INodeTesterWorkerAsync;
+}
+
+export enum NodeTesterEventKinds {
+ Loaded = 'Loaded',
+ Connected = 'Connected',
+}
+
+export interface NodeTesterLoadedEvent {
+ kind: NodeTesterEventKinds.Loaded;
+ args: {
+ loaded: true;
+ };
+}
+
+export type Network = 'QA' | 'SANDBOX' | 'MAINNET';
+
+export type NodeTestResultResponse = {
+ score: number;
+ sentPackets: number;
+ receivedPackets: number;
+ receivedAcks: number;
+ duplicatePackets: number;
+ duplicateAcks: number;
+};
+
+export type Error = {
+ kind: 'Error';
+ args: { message: string };
+};
+
+export type WorkerLoaded = {
+ kind: 'WorkerLoaded';
+};
+
+export type DisplayTesterResults = {
+ kind: 'DisplayTesterResults';
+ args: {
+ result: NodeTestResultResponse;
+ };
+};
+
+export type TestPacket = {
+ kind: 'TestPacket';
+ args: {
+ mixnodeIdentity: string;
+ network: Network;
+ };
+};
+
+export type TestStatus = 'Stopped' | 'Running' | 'Complete';
+
+export type NodeTestEvent = Error | DisplayTesterResults | TestPacket | WorkerLoaded;
diff --git a/sdk/typescript/packages/sdk/src/mixnet/node-tester/worker.ts b/sdk/typescript/packages/sdk/src/mixnet/node-tester/worker.ts
new file mode 100644
index 0000000000..ec51afd3ce
--- /dev/null
+++ b/sdk/typescript/packages/sdk/src/mixnet/node-tester/worker.ts
@@ -0,0 +1,105 @@
+// Copyright 2020-2023 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.
+
+import * as Comlink from 'comlink';
+
+//
+// Rollup will replace wasmBytes with a function that loads the WASM bundle from a base64 string embedded in the output.
+//
+// Doing it this way, saves having to support a large variety of bundlers and their quirks.
+//
+// @ts-ignore
+// eslint-disable-next-line import/no-extraneous-dependencies
+import wasmBytes from '@nymproject/nym-client-wasm/nym_client_wasm_bg.wasm';
+
+/* eslint-disable no-restricted-globals */
+import init, { NymNodeTester, current_network_topology, NodeTestResult } from '@nymproject/nym-client-wasm';
+import type { INodeTesterWorkerAsync, NodeTesterLoadedEvent } from './types';
+import { NodeTesterEventKinds } from './types';
+
+/**
+ * Helper method to send typed messages.
+ * @param event The strongly typed message to send back to the calling thread.
+ */
+// eslint-disable-next-line no-restricted-globals
+const postMessageWithType = (event: E) => self.postMessage(event);
+
+console.log('[Nym WASM client] Starting Nym WASM web worker...');
+
+const buildTester = async (validatorUrl: string, nodeTesterId?: string): Promise => {
+ const topology = await current_network_topology(validatorUrl);
+ return new NymNodeTester(topology, nodeTesterId);
+};
+
+async function main() {
+ const importResult = await init(wasmBytes());
+ importResult.set_panic_hook();
+
+ let nodeTester: NymNodeTester | null = null;
+
+ const webWorker: INodeTesterWorkerAsync = {
+ async init(validatorUrl: string, nodeTesterId?: string) {
+ nodeTester = await buildTester(validatorUrl, nodeTesterId);
+ },
+ async reconnectToGateway() {
+ if (!nodeTester) {
+ throw Error('Please run init first');
+ }
+ await nodeTester.reconnect_to_gateway();
+ },
+ async disconnectFromGateway() {
+ if (!nodeTester) {
+ throw Error('Please run init first');
+ }
+ await nodeTester.disconnect_from_gateway();
+ },
+ async startTest(mixnodeIdentityKey: string) {
+ if (!nodeTester) {
+ throw Error('Please run init first');
+ }
+ console.log(`Testing mixnode with identity key = ${mixnodeIdentityKey}`);
+ // TODO: fix typing in Rust code
+ const result = (await nodeTester.test_node(mixnodeIdentityKey)) as NodeTestResult | undefined;
+
+ // return early if there was an error
+ if (!result) {
+ return result;
+ }
+
+ // log the result in the worker so that the packet stats are visible somewhere and extract the score
+ result.log_details();
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { duplicate_acks, duplicate_packets, received_acks, received_packets, sent_packets } = result;
+
+ // construct the response to avoid any weird proxy effects
+ return {
+ score: result.score(),
+ sentPackets: sent_packets,
+ receivedPackets: received_packets,
+ receivedAcks: received_acks,
+ duplicatePackets: duplicate_packets,
+ duplicateAcks: duplicate_acks,
+ };
+ },
+ };
+
+ // start comlink listening for messages and handle them above
+ Comlink.expose(webWorker);
+
+ // notify any listeners that the web worker has loaded and is ready for testing
+ postMessageWithType({ kind: NodeTesterEventKinds.Loaded, args: { loaded: true } });
+}
+
+main();
diff --git a/sdk/typescript/packages/sdk/src/mixnet/wasm/types-from-wasm-pack.ts b/sdk/typescript/packages/sdk/src/mixnet/wasm/types-from-wasm-pack.ts
new file mode 100644
index 0000000000..25fbba452c
--- /dev/null
+++ b/sdk/typescript/packages/sdk/src/mixnet/wasm/types-from-wasm-pack.ts
@@ -0,0 +1,336 @@
+/**
+ */
+export interface TopologyWasm {
+ free(): void;
+ /**
+ * Specifies whether the client should not refresh the network topology after obtaining
+ * the first valid instance.
+ * Supersedes `topology_refresh_rate_ms`.
+ */
+ disable_refreshing: boolean;
+ /**
+ * The uniform delay every which clients are querying the directory server
+ * to try to obtain a compatible network topology to send sphinx packets through.
+ */
+ topology_refresh_rate_ms: bigint;
+ /**
+ * During topology refresh, test packets are sent through every single possible network
+ * path. This timeout determines waiting period until it is decided that the packet
+ * did not reach its destination.
+ */
+ topology_resolution_timeout_ms: bigint;
+}
+/**
+ */
+export interface TrafficWasm {
+ free(): void;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * sent packet is going to be delayed at any given mix node.
+ * So for a packet going through three mix nodes, on average, it will take three times this value
+ * until the packet reaches its destination.
+ */
+ average_packet_delay_ms: bigint;
+ /**
+ * Controls whether the main packet stream constantly produces packets according to the predefined
+ * poisson distribution.
+ */
+ disable_main_poisson_packet_distribution: boolean;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * it is going to take another 'real traffic stream' message to be sent.
+ * If no real packets are available and cover traffic is enabled,
+ * a loop cover message is sent instead in order to preserve the rate.
+ */
+ message_sending_average_delay_ms: bigint;
+ /**
+ * Controls whether the sent sphinx packet use the NON-DEFAULT bigger size.
+ */
+ use_extended_packet_size: boolean;
+ /**
+ * Controls whether the sent packets should use outfox as opposed to the default sphinx.
+ */
+ use_outfox: boolean;
+}
+/**
+ */
+export interface WasmGateway {
+ free(): void;
+ /**
+ */
+ clients_port: number;
+ /**
+ */
+ host: string;
+ /**
+ */
+ identity_key: string;
+ /**
+ */
+ mix_port: number;
+ /**
+ */
+ owner: string;
+ /**
+ */
+ sphinx_key: string;
+ /**
+ */
+ version: string;
+}
+
+/**
+ */
+export interface ReplySurbsWasm {
+ free(): void;
+ /**
+ * Defines the maximum number of reply surbs a remote party is allowed to request from this client at once.
+ */
+ maximum_allowed_reply_surb_request_size: number;
+ /**
+ * Defines maximum amount of time given reply key is going to be valid for.
+ * This is going to be superseded by key rotation once implemented.
+ */
+ maximum_reply_key_age_ms: bigint;
+ /**
+ * Defines maximum amount of time given reply surb is going to be valid for.
+ * This is going to be superseded by key rotation once implemented.
+ */
+ maximum_reply_surb_age_ms: bigint;
+ /**
+ * Defines maximum amount of time the client is going to wait for reply surbs before
+ * deciding it's never going to get them and would drop all pending messages
+ */
+ maximum_reply_surb_drop_waiting_period_ms: bigint;
+ /**
+ * Defines the maximum number of reply surbs the client would request.
+ */
+ maximum_reply_surb_request_size: number;
+ /**
+ * Defines maximum amount of time the client is going to wait for reply surbs before explicitly asking
+ * for more even though in theory they wouldn't need to.
+ */
+ maximum_reply_surb_rerequest_waiting_period_ms: bigint;
+ /**
+ * Defines the maximum number of reply surbs the client wants to keep in its storage at any times.
+ */
+ maximum_reply_surb_storage_threshold: number;
+ /**
+ * Defines the minimum number of reply surbs the client would request.
+ */
+ minimum_reply_surb_request_size: number;
+ /**
+ * Defines the minimum number of reply surbs the client wants to keep in its storage at all times.
+ * It can only allow to go below that value if its to request additional reply surbs.
+ */
+ minimum_reply_surb_storage_threshold: number;
+}
+
+/**
+ */
+export interface GatewayConnectionWasm {
+ free(): void;
+ /**
+ * How long we're willing to wait for a response to a message sent to the gateway,
+ * before giving up on it.
+ */
+ gateway_response_timeout_ms: bigint;
+}
+
+/**
+ */
+export interface AcknowledgementsWasm {
+ free(): void;
+ /**
+ * Value added to the expected round trip time of an acknowledgement packet before
+ * it is assumed it was lost and retransmission of the data packet happens.
+ * In an ideal network with 0 latency, this value would have been 0.
+ */
+ ack_wait_addition_ms: bigint;
+ /**
+ * Value multiplied with the expected round trip time of an acknowledgement packet before
+ * it is assumed it was lost and retransmission of the data packet happens.
+ * In an ideal network with 0 latency, this value would have been 1.
+ */
+ ack_wait_multiplier: number;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * sent acknowledgement is going to be delayed at any given mix node.
+ * So for an ack going through three mix nodes, on average, it will take three times this value
+ * until the packet reaches its destination.
+ */
+ average_ack_delay_ms: bigint;
+}
+
+/**
+ */
+export interface CoverTrafficWasm {
+ free(): void;
+ /**
+ * Specifies the ratio of `primary_packet_size` to `secondary_packet_size` used in cover traffic.
+ * Only applicable if `secondary_packet_size` is enabled.
+ */
+ cover_traffic_primary_size_ratio: number;
+ /**
+ * Controls whether the dedicated loop cover traffic stream should be enabled.
+ * (and sending packets, on average, every [Self::loop_cover_traffic_average_delay])
+ */
+ disable_loop_cover_traffic_stream: boolean;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * it is going to take for another loop cover traffic message to be sent.
+ */
+ loop_cover_traffic_average_delay_ms: bigint;
+}
+
+export interface Config {
+ free(): void;
+}
+
+export interface DebugWasm {
+ free(): void;
+ /**
+ * Defines all configuration options related to acknowledgements, such as delays or wait timeouts.
+ */
+ acknowledgements: AcknowledgementsWasm;
+ /**
+ * Defines all configuration options related to cover traffic stream(s).
+ */
+ cover_traffic: CoverTrafficWasm;
+ /**
+ * Defines all configuration options related to the gateway connection.
+ */
+ gateway_connection: GatewayConnectionWasm;
+ /**
+ * Defines all configuration options related to reply SURBs.
+ */
+ reply_surbs: ReplySurbsWasm;
+ /**
+ * Defines all configuration options related topology, such as refresh rates or timeouts.
+ */
+ topology: TopologyWasm;
+ /**
+ * Defines all configuration options related to traffic streams.
+ */
+ traffic: TrafficWasm;
+}
+/**
+ */
+export interface GatewayEndpointConfig {
+ free(): void;
+ /**
+ * gateway_id specifies ID of the gateway to which the client should send messages.
+ * If initially omitted, a random gateway will be chosen from the available topology.
+ */
+ gateway_id: string;
+ /**
+ * Address of the gateway listener to which all client requests should be sent.
+ */
+ gateway_listener: string;
+ /**
+ * Address of the gateway owner to which the client should send messages.
+ */
+ gateway_owner: string;
+}
+/**
+ */
+export interface NymClient {
+ free(): void;
+ /**
+ * @returns {string}
+ */
+ self_address(): string;
+ /**
+ * The simplest message variant where no additional information is attached.
+ * You're simply sending your `data` to specified `recipient` without any tagging.
+ *
+ * Ends up with `NymMessage::Plain` variant
+ * @param {Uint8Array} message
+ * @param {string} recipient
+ * @returns {Promise}
+ */
+ send_regular_message(message: Uint8Array, recipient: string): Promise;
+ /**
+ * Creates a message used for a duplex anonymous communication where the recipient
+ * will never learn of our true identity. This is achieved by carefully sending `reply_surbs`.
+ *
+ * Note that if reply_surbs is set to zero then
+ * this variant requires the client having sent some reply_surbs in the past
+ * (and thus the recipient also knowing our sender tag).
+ *
+ * Ends up with `NymMessage::Repliable` variant
+ * @param {Uint8Array} message
+ * @param {string} recipient
+ * @param {number} reply_surbs
+ * @returns {Promise}
+ */
+ send_anonymous_message(message: Uint8Array, recipient: string, reply_surbs: number): Promise;
+ /**
+ * Attempt to use our internally received and stored `ReplySurb` to send the message back
+ * to specified recipient whilst not knowing its full identity (or even gateway).
+ *
+ * Ends up with `NymMessage::Reply` variant
+ * @param {Uint8Array} message
+ * @param {string} recipient_tag
+ * @returns {Promise}
+ */
+ send_reply(message: Uint8Array, recipient_tag: string): Promise;
+}
+
+export interface Topology {
+ free(): void;
+ /**
+ * Specifies whether the client should not refresh the network topology after obtaining
+ * the first valid instance.
+ * Supersedes `topology_refresh_rate_ms`.
+ */
+ disable_refreshing: boolean;
+ /**
+ * The uniform delay every which clients are querying the directory server
+ * to try to obtain a compatible network topology to send sphinx packets through.
+ */
+ topology_refresh_rate_ms: bigint;
+ /**
+ * During topology refresh, test packets are sent through every single possible network
+ * path. This timeout determines waiting period until it is decided that the packet
+ * did not reach its destination.
+ */
+ topology_resolution_timeout_ms: bigint;
+}
+
+export interface Traffic {
+ free(): void;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * sent packet is going to be delayed at any given mix node.
+ * So for a packet going through three mix nodes, on average, it will take three times this value
+ * until the packet reaches its destination.
+ */
+ average_packet_delay_ms: bigint;
+ /**
+ * Controls whether the main packet stream constantly produces packets according to the predefined
+ * poisson distribution.
+ */
+ disable_main_poisson_packet_distribution: boolean;
+ /**
+ * The parameter of Poisson distribution determining how long, on average,
+ * it is going to take another 'real traffic stream' message to be sent.
+ * If no real packets are available and cover traffic is enabled,
+ * a loop cover message is sent instead in order to preserve the rate.
+ */
+ message_sending_average_delay_ms: bigint;
+ /**
+ * Controls whether the sent sphinx packet use the NON-DEFAULT bigger size.
+ */
+ use_extended_packet_size: boolean;
+}
+
+/**
+ */
+export interface NymClientBuilder {
+ free(): void;
+ /**
+ * @returns {Promise>}
+ */
+ start_client(): Promise>;
+}
diff --git a/sdk/typescript/packages/sdk/src/mixnet/wasm/types.ts b/sdk/typescript/packages/sdk/src/mixnet/wasm/types.ts
index 4927f10cfc..1f11384b1a 100644
--- a/sdk/typescript/packages/sdk/src/mixnet/wasm/types.ts
+++ b/sdk/typescript/packages/sdk/src/mixnet/wasm/types.ts
@@ -1,174 +1,6 @@
-export interface Acknowledgements {
- free(): void;
- /**
- * Value added to the expected round trip time of an acknowledgement packet before
- * it is assumed it was lost and retransmission of the data packet happens.
- * In an ideal network with 0 latency, this value would have been 0.
- */
- ack_wait_addition_ms: bigint;
- /**
- * Value multiplied with the expected round trip time of an acknowledgement packet before
- * it is assumed it was lost and retransmission of the data packet happens.
- * In an ideal network with 0 latency, this value would have been 1.
- */
- ack_wait_multiplier: number;
- /**
- * The parameter of Poisson distribution determining how long, on average,
- * sent acknowledgement is going to be delayed at any given mix node.
- * So for an ack going through three mix nodes, on average, it will take three times this value
- * until the packet reaches its destination.
- */
- average_ack_delay_ms: bigint;
-}
+import type { DebugWasm } from './types-from-wasm-pack';
-export interface CoverTraffic {
- free(): void;
- /**
- * Specifies the ratio of `primary_packet_size` to `secondary_packet_size` used in cover traffic.
- * Only applicable if `secondary_packet_size` is enabled.
- */
- cover_traffic_primary_size_ratio: number;
- /**
- * Controls whether the dedicated loop cover traffic stream should be enabled.
- * (and sending packets, on average, every [Self::loop_cover_traffic_average_delay])
- */
- disable_loop_cover_traffic_stream: boolean;
- /**
- * The parameter of Poisson distribution determining how long, on average,
- * it is going to take for another loop cover traffic message to be sent.
- */
- loop_cover_traffic_average_delay_ms: bigint;
-}
-
-export interface GatewayConnection {
- free(): void;
- /**
- * How long we're willing to wait for a response to a message sent to the gateway,
- * before giving up on it.
- */
- gateway_response_timeout_ms: bigint;
-}
-
-export interface ReplySurbs {
- free(): void;
- /**
- * Defines the maximum number of reply surbs a remote party is allowed to request from this client at once.
- */
- maximum_allowed_reply_surb_request_size: number;
- /**
- * Defines maximum amount of time given reply key is going to be valid for.
- * This is going to be superseded by key rotation once implemented.
- */
- maximum_reply_key_age_ms: bigint;
- /**
- * Defines maximum amount of time given reply surb is going to be valid for.
- * This is going to be superseded by key rotation once implemented.
- */
- maximum_reply_surb_age_ms: bigint;
- /**
- * Defines maximum amount of time the client is going to wait for reply surbs before
- * deciding it's never going to get them and would drop all pending messages
- */
- maximum_reply_surb_drop_waiting_period_ms: bigint;
- /**
- * Defines the maximum number of reply surbs the client would request.
- */
- maximum_reply_surb_request_size: number;
- /**
- * Defines maximum amount of time the client is going to wait for reply surbs before explicitly asking
- * for more even though in theory they wouldn't need to.
- */
- maximum_reply_surb_rerequest_waiting_period_ms: bigint;
- /**
- * Defines the maximum number of reply surbs the client wants to keep in its storage at any times.
- */
- maximum_reply_surb_storage_threshold: number;
- /**
- * Defines the minimum number of reply surbs the client would request.
- */
- minimum_reply_surb_request_size: number;
- /**
- * Defines the minimum number of reply surbs the client wants to keep in its storage at all times.
- * It can only allow to go below that value if its to request additional reply surbs.
- */
- minimum_reply_surb_storage_threshold: number;
-}
-
-export interface Debug {
- free(): void;
- /**
- * Defines all configuration options related to acknowledgements, such as delays or wait timeouts.
- */
- acknowledgements: Acknowledgements;
- /**
- * Defines all configuration options related to cover traffic stream(s).
- */
- cover_traffic: CoverTraffic;
- /**
- * Defines all configuration options related to the gateway connection.
- */
- gateway_connection: GatewayConnection;
- /**
- * Defines all configuration options related to reply SURBs.
- */
- reply_surbs: ReplySurbs;
- /**
- * Defines all configuration options related topology, such as refresh rates or timeouts.
- */
- topology: Topology;
- /**
- * Defines all configuration options related to traffic streams.
- */
- traffic: Traffic;
-}
-
-export interface Topology {
- free(): void;
- /**
- * Specifies whether the client should not refresh the network topology after obtaining
- * the first valid instance.
- * Supersedes `topology_refresh_rate_ms`.
- */
- disable_refreshing: boolean;
- /**
- * The uniform delay every which clients are querying the directory server
- * to try to obtain a compatible network topology to send sphinx packets through.
- */
- topology_refresh_rate_ms: bigint;
- /**
- * During topology refresh, test packets are sent through every single possible network
- * path. This timeout determines waiting period until it is decided that the packet
- * did not reach its destination.
- */
- topology_resolution_timeout_ms: bigint;
-}
-
-export interface Traffic {
- free(): void;
- /**
- * The parameter of Poisson distribution determining how long, on average,
- * sent packet is going to be delayed at any given mix node.
- * So for a packet going through three mix nodes, on average, it will take three times this value
- * until the packet reaches its destination.
- */
- average_packet_delay_ms: bigint;
- /**
- * Controls whether the main packet stream constantly produces packets according to the predefined
- * poisson distribution.
- */
- disable_main_poisson_packet_distribution: boolean;
- /**
- * The parameter of Poisson distribution determining how long, on average,
- * it is going to take another 'real traffic stream' message to be sent.
- * If no real packets are available and cover traffic is enabled,
- * a loop cover message is sent instead in order to preserve the rate.
- */
- message_sending_average_delay_ms: bigint;
- /**
- * Controls whether the sent sphinx packet use the NON-DEFAULT bigger size.
- */
- use_extended_packet_size: boolean;
-}
+export * from './types-from-wasm-pack';
/**
* Some common mime types, however, you can always just specify the mime-type as a string
@@ -221,7 +53,7 @@ export interface NymClientConfig {
/**
* Optional. Settings for the WASM client.
*/
- debug?: Debug;
+ debug?: DebugWasm;
}
export interface IWebWorker {
diff --git a/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts b/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts
index 4dbe9d5154..f1755b5d1f 100644
--- a/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts
+++ b/sdk/typescript/packages/sdk/src/mixnet/wasm/worker.ts
@@ -168,43 +168,40 @@ init(wasmBytes())
if (config.gatewayListener) gatewayEndpoint.gateway_listener = config.gatewayListener;
// create the client, passing handlers for events
- wrapper.init(
- new Config(config.clientId, config.nymApiUrl, gatewayEndpoint, config.debug || default_debug()),
- async (message) => {
- // fire an event with the raw message
- postMessageWithType({
- kind: EventKinds.RawMessageReceived,
- args: { payload: message },
- });
+ wrapper.init(new Config(config.clientId, config.nymApiUrl, config.debug || default_debug()), async (message) => {
+ // fire an event with the raw message
+ postMessageWithType({
+ kind: EventKinds.RawMessageReceived,
+ args: { payload: message },
+ });
- try {
- // try to decode the payload to extract the mime-type, headers and payload body
- const decodedPayload = decode_payload(message);
- const { payload, headers } = decodedPayload;
- const mimeType = decodedPayload.mimeType as MimeTypes;
+ try {
+ // try to decode the payload to extract the mime-type, headers and payload body
+ const decodedPayload = decode_payload(message);
+ const { payload, headers } = decodedPayload;
+ const mimeType = decodedPayload.mimeType as MimeTypes;
- if (wrapper.getTextMimeTypes().includes(mimeType)) {
- const stringMessage = parse_utf8_string(payload);
+ if (wrapper.getTextMimeTypes().includes(mimeType)) {
+ const stringMessage = parse_utf8_string(payload);
- // the payload is a string type (in the options at creation time, string mime-types are set, or fall back
- // to defaults, such as `text/plain`, `application/json`, etc)
- postMessageWithType({
- kind: EventKinds.StringMessageReceived,
- args: { mimeType, payload: stringMessage, payloadRaw: payload, headers },
- });
- return;
- }
-
- // the payload is a binary type
- postMessageWithType({
- kind: EventKinds.BinaryMessageReceived,
- args: { mimeType, payload, headers },
+ // the payload is a string type (in the options at creation time, string mime-types are set, or fall back
+ // to defaults, such as `text/plain`, `application/json`, etc)
+ postMessageWithType({
+ kind: EventKinds.StringMessageReceived,
+ args: { mimeType, payload: stringMessage, payloadRaw: payload, headers },
});
- } catch (e) {
- console.error('Failed to parse binary message', e);
+ return;
}
- },
- );
+
+ // the payload is a binary type
+ postMessageWithType({
+ kind: EventKinds.BinaryMessageReceived,
+ args: { mimeType, payload, headers },
+ });
+ } catch (e) {
+ console.error('Failed to parse binary message', e);
+ }
+ });
// start the client sending traffic
await wrapper.start();
diff --git a/ts-packages/mock-nym-api/src/index.ts b/ts-packages/mock-nym-api/src/index.ts
index 89ab9ad245..dc5848fd1a 100644
--- a/ts-packages/mock-nym-api/src/index.ts
+++ b/ts-packages/mock-nym-api/src/index.ts
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
import express from 'express';
import dotenv from 'dotenv';
import { createProxyMiddleware } from 'http-proxy-middleware';
diff --git a/ts-packages/react-webpack-with-theme-example/src/App.tsx b/ts-packages/react-webpack-with-theme-example/src/App.tsx
index 6f70787807..35bca1929e 100644
--- a/ts-packages/react-webpack-with-theme-example/src/App.tsx
+++ b/ts-packages/react-webpack-with-theme-example/src/App.tsx
@@ -20,6 +20,7 @@ export const Content: FCWithChildren = () => {
const isMounted = useIsMounted();
if (isMounted()) {
+ // eslint-disable-next-line no-console
console.log('Content is mounted');
}
diff --git a/yarn.lock b/yarn.lock
index 34f8aaa416..197fe4355b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
# yarn lockfile v1
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
"@adobe/css-tools@^4.0.1":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855"
@@ -1203,7 +1208,7 @@
dependencies:
regenerator-runtime "^0.13.2"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
@@ -1808,9 +1813,9 @@
integrity sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==
"@floating-ui/dom@^1.0.0":
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.4.2.tgz#eb3a37f7506c4f95ef735967dc3496b5012e11cb"
- integrity sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.4.3.tgz#0854a3297ea03894932381f3ea1403fab3a6e602"
+ integrity sha512-nB/68NyaQlcdY22L+Fgd1HERQ7UGv7XFN+tPxwrEfQL4nKtAP/jIZnZtpUlXbtV+VEGHh6W/63Gy2C5biWI3sA==
dependencies:
"@floating-ui/core" "^1.3.1"
@@ -2390,6 +2395,20 @@
prop-types "^15.8.1"
react-is "^18.2.0"
+"@mui/base@5.0.0-beta.5":
+ version "5.0.0-beta.5"
+ resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.5.tgz#b566f3beb1eb2823139eabaf52014cf7be900015"
+ integrity sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==
+ dependencies:
+ "@babel/runtime" "^7.22.5"
+ "@emotion/is-prop-valid" "^1.2.1"
+ "@mui/types" "^7.2.4"
+ "@mui/utils" "^5.13.6"
+ "@popperjs/core" "^2.11.8"
+ clsx "^1.2.1"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+
"@mui/core-downloads-tracker@^5.13.4":
version "5.13.4"
resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz#7e4b491d8081b6d45ae51556d82cb16b31315a19"
@@ -2417,16 +2436,16 @@
react-is "^18.2.0"
"@mui/material@^5.0.1", "@mui/material@^5.2.2":
- version "5.13.5"
- resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.5.tgz#c14f14824f3a37ae0c5ebddbc0034956bc6fec30"
- integrity sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ==
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.6.tgz#caaba1e071e394c415208404ce6964e6c14c16d6"
+ integrity sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==
dependencies:
- "@babel/runtime" "^7.21.0"
- "@mui/base" "5.0.0-beta.4"
+ "@babel/runtime" "^7.22.5"
+ "@mui/base" "5.0.0-beta.5"
"@mui/core-downloads-tracker" "^5.13.4"
- "@mui/system" "^5.13.5"
+ "@mui/system" "^5.13.6"
"@mui/types" "^7.2.4"
- "@mui/utils" "^5.13.1"
+ "@mui/utils" "^5.13.6"
"@types/react-transition-group" "^4.4.6"
clsx "^1.2.1"
csstype "^3.1.2"
@@ -2476,16 +2495,16 @@
jss-plugin-vendor-prefixer "^10.10.0"
prop-types "^15.8.1"
-"@mui/system@>= 5", "@mui/system@^5.0.1", "@mui/system@^5.13.5":
- version "5.13.5"
- resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.5.tgz#9f67ea0c4f6974713f90b7b94c999fd3f40f8de3"
- integrity sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA==
+"@mui/system@>= 5", "@mui/system@^5.0.1", "@mui/system@^5.13.5", "@mui/system@^5.13.6":
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.6.tgz#5bf4f84fad0c9ed771458f821e384f61abfa33ca"
+ integrity sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==
dependencies:
- "@babel/runtime" "^7.21.0"
+ "@babel/runtime" "^7.22.5"
"@mui/private-theming" "^5.13.1"
"@mui/styled-engine" "^5.13.2"
"@mui/types" "^7.2.4"
- "@mui/utils" "^5.13.1"
+ "@mui/utils" "^5.13.6"
clsx "^1.2.1"
csstype "^3.1.2"
prop-types "^15.8.1"
@@ -2495,12 +2514,12 @@
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328"
integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==
-"@mui/utils@^5.10.3", "@mui/utils@^5.13.1", "@mui/utils@^5.7.0":
- version "5.13.1"
- resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.1.tgz#86199e46014215f95da046a5ec803f4a39c96eee"
- integrity sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==
+"@mui/utils@^5.10.3", "@mui/utils@^5.13.1", "@mui/utils@^5.13.6", "@mui/utils@^5.7.0":
+ version "5.13.6"
+ resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.6.tgz#aa29d75de59577585b9f23891b03592d40459ed7"
+ integrity sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==
dependencies:
- "@babel/runtime" "^7.21.0"
+ "@babel/runtime" "^7.22.5"
"@types/prop-types" "^15.7.5"
"@types/react-is" "^18.2.0"
prop-types "^15.8.1"
@@ -2808,9 +2827,6 @@
dependencies:
nx "15.9.4"
-"@nymproject/nym-client-wasm@file:clients/webassembly/pkg":
- version "1.1.1"
-
"@nymproject/nym-validator-client@^0.18.0":
version "0.18.0"
resolved "https://registry.yarnpkg.com/@nymproject/nym-validator-client/-/nym-validator-client-0.18.0.tgz#4dd72bafdf6c72b603242f32c0bb9a1f9e475b98"
@@ -3036,10 +3052,10 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
-"@remix-run/router@1.6.3":
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.6.3.tgz#8205baf6e17ef93be35bf62c37d2d594e9be0dad"
- integrity sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==
+"@remix-run/router@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.0.tgz#550a8d5760b78efc5d60f62b5829b0f74c1fde81"
+ integrity sha512-Eu1V3kz3mV0wUpVTiFHuaT8UD1gj/0VnoFHQYX35xlslQUpe8CuYoKFn9d4WZFHm3yDywz6ALZuGdnUPKrNeAw==
"@rollup/plugin-commonjs@^24.0.1":
version "24.1.0"
@@ -3107,9 +3123,9 @@
resolve "^1.22.1"
"@rollup/plugin-typescript@^11.0.0":
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.1.tgz#258663a7aa6b51390dd39ae6e5502f2c4b2807cb"
- integrity sha512-Ioir+x5Bejv72Lx2Zbz3/qGg7tvGbxQZALCLoJaGrkNXak/19+vKgKYJYM3i/fJxvsb23I9FuFQ8CUBEfsmBRg==
+ version "11.1.2"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.2.tgz#09eb5690a650bb0334bf84125bce9abd296442e4"
+ integrity sha512-0ghSOCMcA7fl1JM+0gYRf+Q/HWyg+zg7/gDSc+fRLmlJWcW5K1I+CLRzaRhXf4Y3DRyPnnDo4M2ktw+a6JcDEg==
dependencies:
"@rollup/pluginutils" "^5.0.1"
resolve "^1.22.1"
@@ -3142,79 +3158,79 @@
resolved "https://registry.yarnpkg.com/@sapphire/utilities/-/utilities-3.12.0.tgz#3ee8330338aa79a7e0cab04d4d0eec9ed69fc9bf"
integrity sha512-y1JP4FdPBkZjJGJcb5Zx0ok64mtpGvz0TLOC49HTwYsfBQL8tsTct93yoYdEEMWSZFmOF1ZvV8L6jIJ1CW8bJw==
-"@sentry-internal/tracing@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.56.0.tgz#ba709258f2f0f3d8a36f9740403088b39212b843"
- integrity sha512-OKI4Pz/O13gng8hT9rNc+gRV3+P7nnk1HnHlV8fgaQydS6DsRxoDL1sHa42tZGbh7K9jqNAP3TC6VjBOsr2tXA==
+"@sentry-internal/tracing@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551"
+ integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A==
dependencies:
- "@sentry/core" "7.56.0"
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
- tslib "^1.9.3"
+ "@sentry/core" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
-"@sentry/browser@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.56.0.tgz#6bf3ff21bc2e9b66a72ea0c7dcc3572fdeb3bd8f"
- integrity sha512-qpyyw+NM/psbNAYMlTCCdWwxHHcogppEQ+Q40jGE4sKP2VRIjjyteJkUcaEMoGpbJXx9puzTWbpzqlQ8r15Now==
+"@sentry/browser@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb"
+ integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w==
dependencies:
- "@sentry-internal/tracing" "7.56.0"
- "@sentry/core" "7.56.0"
- "@sentry/replay" "7.56.0"
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
- tslib "^1.9.3"
+ "@sentry-internal/tracing" "7.57.0"
+ "@sentry/core" "7.57.0"
+ "@sentry/replay" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
-"@sentry/core@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.56.0.tgz#f4253e0d61f55444180a63e5278b62e57303f7cf"
- integrity sha512-Nuyyfh09Yz27kPo74fXHlrdmZeK6zrlJVtxQ6LkwuoaTBcNcesNXVaOtr6gjvUGUmsfriVPP3Jero5LXufV7GQ==
+"@sentry/core@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb"
+ integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw==
dependencies:
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
- tslib "^1.9.3"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
"@sentry/integrations@^7.54.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.56.0.tgz#6fe812454fbccf00810f65667eb393b3bf298b92"
- integrity sha512-0d/E/R3MW+5bQ9wcHPD0h/B2KFOpUt+wQgN1kNk7atY12auDzHKuGCjPP87D/xVyRoma3ErFqZCRqwtvCj1cfQ==
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.57.0.tgz#298085b3a2fe862cc70bc7f2143aa0fbc617322c"
+ integrity sha512-C3WZo5AGI2L0dj+mIjeZpdAwDEG2nDYvZbTzq5J9hVoHFdP3t7fOWBHSPkSFVtTdMaJrv+82aKnUefVCeAjxGg==
dependencies:
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
localforage "^1.8.1"
- tslib "^1.9.3"
+ tslib "^2.4.1 || ^1.9.3"
"@sentry/react@^7.54.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.56.0.tgz#7e2e9363a76c7d67854bdb179142a2f7f910d476"
- integrity sha512-dRnkZwspef5aEHV/eiLS/mhomFCXItylU8s78fzAn5QMTDGHmu5Pnhl5dxh/zbPUcdXqFA6GwJVucV4gzsNEJw==
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.57.0.tgz#cf91f0115bcd2a8306d6c8a39d8e8b53d4b21814"
+ integrity sha512-XGNTjIoCG3naSmCU8qObd+y+CqAB6NQkGWOp2yyBwp2inyKF2ehJvDh6bIQloBYq2TmOJDa4NfXdMrkilxaLFQ==
dependencies:
- "@sentry/browser" "7.56.0"
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
+ "@sentry/browser" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
hoist-non-react-statics "^3.3.2"
- tslib "^1.9.3"
+ tslib "^2.4.1 || ^1.9.3"
-"@sentry/replay@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.56.0.tgz#8a49dcb45e9ea83bf905cec0d9b42fed4b8085bd"
- integrity sha512-bvjiJK1+SM/paLapuL+nEJ8CIF1bJqi0nnFyxUIi2L5L6yb2uMwfyT3IQ+kz0cXJsLdb3HN4WMphVjyiU9pFdg==
+"@sentry/replay@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39"
+ integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw==
dependencies:
- "@sentry/core" "7.56.0"
- "@sentry/types" "7.56.0"
- "@sentry/utils" "7.56.0"
+ "@sentry/core" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
-"@sentry/types@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.56.0.tgz#9042a099cf9e8816d081886d24b88082a5d9f87a"
- integrity sha512-5WjhVOQm75ItOytOx2jTx+5yw8/qJ316+g1Di8dS9+kgIi1zniqdMcX00C2yYe3FMUgFB49PegCUYulm9Evapw==
+"@sentry/types@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce"
+ integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w==
-"@sentry/utils@7.56.0":
- version "7.56.0"
- resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.56.0.tgz#e60e4935d17b2197584abf6ce61b522ad055352c"
- integrity sha512-wgeX7bufxc//TjjSIE+gCMm8hVId7Jzvc+f441bYrWnNZBuzPIDW2BummCcPrKzSYe5GeYZDTZGV8YZGMLGBjw==
+"@sentry/utils@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8"
+ integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg==
dependencies:
- "@sentry/types" "7.56.0"
- tslib "^1.9.3"
+ "@sentry/types" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
"@sigstore/protobuf-specs@^0.1.0":
version "0.1.0"
@@ -3620,14 +3636,14 @@
qs "^6.10.0"
telejson "^6.0.8"
-"@storybook/channel-postmessage@7.0.23":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.0.23.tgz#eff248def859a0106cb45d535eb13111b8abb2df"
- integrity sha512-SfXTV55Z9U5rN1OuyR56s+PUpav3b4SgXtP67bnNsrv7dkKhBwr0DUUJogIRnjmY0Loy/hLvJ23kfmKXPWC4vQ==
+"@storybook/channel-postmessage@7.0.24":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.0.24.tgz#789bd121cf64e306737ec0f3b096ea0ac6f47bf5"
+ integrity sha512-QLtLXjEeTEwBN/7pB888mBaykmRU9Jy2BitvZuLJWyHHygTYm3vYZOaGR37DT+q/6Ob5GaZ0tURZmCSNDe8IIA==
dependencies:
- "@storybook/channels" "7.0.23"
- "@storybook/client-logger" "7.0.23"
- "@storybook/core-events" "7.0.23"
+ "@storybook/channels" "7.0.24"
+ "@storybook/client-logger" "7.0.24"
+ "@storybook/core-events" "7.0.24"
"@storybook/global" "^5.0.0"
qs "^6.10.0"
telejson "^7.0.3"
@@ -3652,10 +3668,10 @@
ts-dedent "^2.0.0"
util-deprecate "^1.0.2"
-"@storybook/channels@7.0.23":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.0.23.tgz#4c57f5f43289ca21b6a713ff9c399c8abb6c868a"
- integrity sha512-cCxR3Z84YQjsVMPgFTI+kDVNOlgXSDakwjkNFBznU+s2qhGW5eZt2g9YRDeVDQ6AjR4j4RrGhwddRq4lQZF2pg==
+"@storybook/channels@7.0.24":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.0.24.tgz#fcfe7a1a5599265506f07fe81d03b0585303fc15"
+ integrity sha512-NZVLwMhtzy6cZrNRjshFvMAD9mQTmJDNwhohodSkM/YFCDVFhmxQk9tgizVGh9MwY3CYGJ1SI96RUejGosb49Q==
"@storybook/client-api@6.5.16":
version "6.5.16"
@@ -3691,10 +3707,10 @@
core-js "^3.8.2"
global "^4.4.0"
-"@storybook/client-logger@7.0.23", "@storybook/client-logger@^6.4.0 || >=6.5.0-0":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.23.tgz#5db5d144d1948fd8c856195ee6a699c002046557"
- integrity sha512-L287SRO8EaYOxTpryV7N/1WCL5I1IFs5Naiq3FpybhguUP7F3Si7KWvVdFmSW06K9jNj2IEQ/8zBRM8ra4ttyg==
+"@storybook/client-logger@7.0.24", "@storybook/client-logger@^6.4.0 || >=6.5.0-0":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.24.tgz#7be57ce1f90e65c6e9da7a88ed9ca7c5ce3c6536"
+ integrity sha512-4zRTb+QQ1hWaRqad/UufZNRfi2d/cf5a40My72Ct97VwjhJFE6aQ3K+hl1Xt6hh8dncDL2JK3cgziw6ElqjT0w==
dependencies:
"@storybook/global" "^5.0.0"
@@ -3801,10 +3817,10 @@
dependencies:
core-js "^3.8.2"
-"@storybook/core-events@7.0.23":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.0.23.tgz#99d36712dba8eae9e1585298dd9b97385ae13ad5"
- integrity sha512-Hdt18p/qbgJc+1wY2dGcdjmlsuNXWsoLTaXrjInuvr1U0kmKmKs0VMaB0cFubnUgCmB3YQWTGnVr3q8iz9iB7g==
+"@storybook/core-events@7.0.24":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.0.24.tgz#3fa4b2b3af64a86525b4cf07f49a7410125ef810"
+ integrity sha512-xkf/rihCkhqMeh5EA8lVp90/mzbb2gcg6I3oeFWw2hognVcTnPXg6llhWdU4Spqd0cals7GEFmQugIILCmH8GA==
"@storybook/core-server@6.5.16":
version "6.5.16"
@@ -3936,15 +3952,15 @@
global "^4.4.0"
"@storybook/instrumenter@^6.4.0 || >=6.5.0-0":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.0.23.tgz#0f7efd95cb2ec4698fc57cc012045cec42b7ef6b"
- integrity sha512-CeV2se64XxccD4L6XFI3cFfEz3/Lcbrvb+T3bZZzGOXO18zH5tN3jXVfAONrz/mU69jL9mbo96hFl51UDtwcAg==
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.0.24.tgz#fbc81250f25b0d5f3da3a3aa9dad48cdc82642f9"
+ integrity sha512-XQ4Whq0rqW9eFMTtRpLxcl6bCf+KO3UZYcm+H63EDn9TstDyopmqv1fDg2tmJOpqLo143F8qLVC89rI7M/lO6w==
dependencies:
- "@storybook/channels" "7.0.23"
- "@storybook/client-logger" "7.0.23"
- "@storybook/core-events" "7.0.23"
+ "@storybook/channels" "7.0.24"
+ "@storybook/client-logger" "7.0.24"
+ "@storybook/core-events" "7.0.24"
"@storybook/global" "^5.0.0"
- "@storybook/preview-api" "7.0.23"
+ "@storybook/preview-api" "7.0.24"
"@storybook/manager-webpack4@6.5.16":
version "6.5.16"
@@ -4060,18 +4076,18 @@
dependencies:
core-js "^3.8.2"
-"@storybook/preview-api@7.0.23":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.0.23.tgz#6f4d98a54c7367341e086a1818866e2e1e97faea"
- integrity sha512-kXhDX6gVjQu4Lx4SnCW5Yt5W/TbQofp9SL0paB1ywsJ15xSAPU5KVILe9OWAOba2YUnk7sHux/xDX/gH5RCpVw==
+"@storybook/preview-api@7.0.24":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.0.24.tgz#93634c060aa43bb10fb233f28ae83b7d74b98aad"
+ integrity sha512-psycU07tuB5nyJvfAJiDN/9e8cjOdJ+5lrCSYC3vPzH86LxADDIN0/8xFb1CaQWcXZsADEFJGpHKWbRhjym5ew==
dependencies:
- "@storybook/channel-postmessage" "7.0.23"
- "@storybook/channels" "7.0.23"
- "@storybook/client-logger" "7.0.23"
- "@storybook/core-events" "7.0.23"
+ "@storybook/channel-postmessage" "7.0.24"
+ "@storybook/channels" "7.0.24"
+ "@storybook/client-logger" "7.0.24"
+ "@storybook/core-events" "7.0.24"
"@storybook/csf" "^0.1.0"
"@storybook/global" "^5.0.0"
- "@storybook/types" "7.0.23"
+ "@storybook/types" "7.0.24"
"@types/qs" "^6.9.5"
dequal "^2.0.2"
lodash "^4.17.21"
@@ -4252,15 +4268,15 @@
memoizerific "^1.11.3"
regenerator-runtime "^0.13.7"
-"@storybook/types@7.0.23":
- version "7.0.23"
- resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.23.tgz#08ae3223e97ed1baa9aa715745a05ae83311425c"
- integrity sha512-ziszL3OfhTT5PHE7kiQjWWx3Lw3qro8eLX+56dXDNgmft5LS66yEANcaA7OzxLnEgdyWSxJqgrVo6r0JwHp2Eg==
+"@storybook/types@7.0.24":
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.24.tgz#22b2f6658f9a091ff584e1a0643ee1ea9a54ed39"
+ integrity sha512-SZh/XBHP1TT5bmEk0W52nT0v6fUnYwmZVls3da5noutdgOAiwL7TANtl41XrNjG+UDr8x0OE3PVVJi+LhwUaNA==
dependencies:
- "@storybook/channels" "7.0.23"
+ "@storybook/channels" "7.0.24"
"@types/babel__core" "^7.0.0"
"@types/express" "^4.7.0"
- file-system-cache "^2.0.0"
+ file-system-cache "2.3.0"
"@storybook/ui@6.5.16":
version "6.5.16"
@@ -5001,9 +5017,9 @@
form-data "^3.0.0"
"@types/node@*", "@types/node@>=13.7.0":
- version "20.3.1"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
- integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
+ version "20.3.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898"
+ integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==
"@types/node@^13.7.0":
version "13.13.52"
@@ -5011,9 +5027,9 @@
integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==
"@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^16.7.13":
- version "16.18.36"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.36.tgz#0db5d7efc4760d36d0d1d22c85d1a53accd5dc27"
- integrity sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==
+ version "16.18.37"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.37.tgz#a1f8728e4dc30163deb41e9b7aba65d0c2d4eda1"
+ integrity sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA==
"@types/normalize-package-data@^2.4.0":
version "2.4.1"
@@ -5113,9 +5129,9 @@
"@types/react" "*"
"@types/react@*", "@types/react@^18.0.26":
- version "18.2.13"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.13.tgz#a98c09bde8b18f80021935b11d2d29ef5f4dcb2f"
- integrity sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==
+ version "18.2.14"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127"
+ integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -5300,14 +5316,14 @@
integrity sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==
"@typescript-eslint/eslint-plugin@^5.13.0", "@typescript-eslint/eslint-plugin@^5.7.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31"
- integrity sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3"
+ integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==
dependencies:
"@eslint-community/regexpp" "^4.4.0"
- "@typescript-eslint/scope-manager" "5.60.0"
- "@typescript-eslint/type-utils" "5.60.0"
- "@typescript-eslint/utils" "5.60.0"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/type-utils" "5.60.1"
+ "@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
grapheme-splitter "^1.0.4"
ignore "^5.2.0"
@@ -5316,78 +5332,78 @@
tsutils "^3.21.0"
"@typescript-eslint/experimental-utils@^5.3.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.0.tgz#48ffa47238592397c3d857fe1403eed3b1d5e604"
- integrity sha512-ovid3u7CNBrr0Ct35LUPkNYH4e+z4Kc6dPfSG99oMmH9SfoEoefq09uSnJI4mUb/UM7a/peVM03G+MzLxrD16g==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.1.tgz#d783bb63b9183541019a945eda6a9d96b096d985"
+ integrity sha512-TXUdLxv2t8181nh5yLXl/Gr/zKj1ZofQ7m+ZdmG2+El0TYOHCvlZfc35D4nturemC3RUnf3KmLuFp3bVBjkG5w==
dependencies:
- "@typescript-eslint/utils" "5.60.0"
+ "@typescript-eslint/utils" "5.60.1"
"@typescript-eslint/parser@^5.13.0", "@typescript-eslint/parser@^5.7.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a"
- integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3"
+ integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==
dependencies:
- "@typescript-eslint/scope-manager" "5.60.0"
- "@typescript-eslint/types" "5.60.0"
- "@typescript-eslint/typescript-estree" "5.60.0"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/typescript-estree" "5.60.1"
debug "^4.3.4"
-"@typescript-eslint/scope-manager@5.60.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c"
- integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==
+"@typescript-eslint/scope-manager@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb"
+ integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==
dependencies:
- "@typescript-eslint/types" "5.60.0"
- "@typescript-eslint/visitor-keys" "5.60.0"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
-"@typescript-eslint/type-utils@5.60.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz#69b09087eb12d7513d5b07747e7d47f5533aa228"
- integrity sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==
+"@typescript-eslint/type-utils@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4"
+ integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==
dependencies:
- "@typescript-eslint/typescript-estree" "5.60.0"
- "@typescript-eslint/utils" "5.60.0"
+ "@typescript-eslint/typescript-estree" "5.60.1"
+ "@typescript-eslint/utils" "5.60.1"
debug "^4.3.4"
tsutils "^3.21.0"
-"@typescript-eslint/types@5.60.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558"
- integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==
+"@typescript-eslint/types@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561"
+ integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==
-"@typescript-eslint/typescript-estree@5.60.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600"
- integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==
+"@typescript-eslint/typescript-estree@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834"
+ integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==
dependencies:
- "@typescript-eslint/types" "5.60.0"
- "@typescript-eslint/visitor-keys" "5.60.0"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/utils@5.60.0", "@typescript-eslint/utils@^5.10.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c"
- integrity sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==
+"@typescript-eslint/utils@5.60.1", "@typescript-eslint/utils@^5.10.0":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80"
+ integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@types/json-schema" "^7.0.9"
"@types/semver" "^7.3.12"
- "@typescript-eslint/scope-manager" "5.60.0"
- "@typescript-eslint/types" "5.60.0"
- "@typescript-eslint/typescript-estree" "5.60.0"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/typescript-estree" "5.60.1"
eslint-scope "^5.1.1"
semver "^7.3.7"
-"@typescript-eslint/visitor-keys@5.60.0":
- version "5.60.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66"
- integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==
+"@typescript-eslint/visitor-keys@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434"
+ integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==
dependencies:
- "@typescript-eslint/types" "5.60.0"
+ "@typescript-eslint/types" "5.60.1"
eslint-visitor-keys "^3.3.0"
"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
@@ -5689,9 +5705,9 @@
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
"@yarnpkg/parsers@^3.0.0-rc.18":
- version "3.0.0-rc.46"
- resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01"
- integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==
+ version "3.0.0-rc.47"
+ resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.47.tgz#2b67a2f5098cafcd0a1ce7f2e9174794d639046e"
+ integrity sha512-ri/QnMiMobEgRUBF1fPcxH1ICa9jsG8y4tDNRAuk6zPdCPkSAzACKaXjmDiAZFiwKxK4hTVj0E8nklgWFeTLng==
dependencies:
js-yaml "^3.10.0"
tslib "^2.4.0"
@@ -6045,9 +6061,9 @@ aria-query@5.1.3:
deep-equal "^2.0.5"
aria-query@^5.0.0, aria-query@^5.1.3:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15"
- integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+ integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
dependencies:
dequal "^2.0.3"
@@ -6099,7 +6115,7 @@ array-ify@^1.0.0:
resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
-array-includes@^3.0.3, array-includes@^3.1.5, array-includes@^3.1.6:
+array-includes@^3.0.3, array-includes@^3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
@@ -6122,11 +6138,6 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array-union@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975"
- integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==
-
array-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
@@ -7086,9 +7097,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001503:
- version "1.0.30001507"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534"
- integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==
+ version "1.0.30001509"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14"
+ integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==
capture-exit@^2.0.0:
version "2.0.0"
@@ -7807,18 +7818,6 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
-copy-webpack-plugin@^10.2.4:
- version "10.2.4"
- resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe"
- integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==
- dependencies:
- fast-glob "^3.2.7"
- glob-parent "^6.0.1"
- globby "^12.0.2"
- normalize-path "^3.0.0"
- schema-utils "^4.0.0"
- serialize-javascript "^6.0.0"
-
core-js-compat@^3.30.1, core-js-compat@^3.30.2, core-js-compat@^3.8.1:
version "3.31.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1"
@@ -8913,9 +8912,9 @@ ejs@^3.1.7:
jake "^10.8.5"
electron-to-chromium@^1.4.431:
- version "1.4.439"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.439.tgz#d0748e8128c18f92354d3412dfb2104c3fb90e8f"
- integrity sha512-BHpErPSNhb9FB25+OwQP6mCAf3ZXfGbmuvc4LzBNVJwpCcXQJm++LerimocYRG9FRxUVRKZqaB7d0+pImSTPSg==
+ version "1.4.445"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz#058d2c5f3a2981ab1a37440f5a5e42d15672aa6d"
+ integrity sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==
elliptic@^6.5.3, elliptic@^6.5.4:
version "6.5.4"
@@ -9018,9 +9017,9 @@ env-paths@^2.2.0:
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
envinfo@^7.7.3, envinfo@^7.7.4:
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.9.0.tgz#47594a13081be0d9be6e513534e8c58dbb26c7a1"
- integrity sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ==
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13"
+ integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==
err-code@^2.0.2:
version "2.0.3"
@@ -9854,7 +9853,7 @@ fast-glob@^2.2.6:
merge2 "^1.2.3"
micromatch "^3.1.10"
-fast-glob@^3.2.7, fast-glob@^3.2.9:
+fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
@@ -9972,6 +9971,14 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
+file-system-cache@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6"
+ integrity sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==
+ dependencies:
+ fs-extra "11.1.1"
+ ramda "0.29.0"
+
file-system-cache@^1.0.5:
version "1.1.0"
resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.1.0.tgz#984de17b976b75a77a27e08d6828137c1aa80fa1"
@@ -9980,14 +9987,6 @@ file-system-cache@^1.0.5:
fs-extra "^10.1.0"
ramda "^0.28.0"
-file-system-cache@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6"
- integrity sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==
- dependencies:
- fs-extra "11.1.1"
- ramda "0.29.0"
-
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -10552,7 +10551,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob-parent@^6.0.1, glob-parent@^6.0.2:
+glob-parent@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
@@ -10601,15 +10600,15 @@ glob@7.2.0:
path-is-absolute "^1.0.0"
glob@^10.2.2:
- version "10.3.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.0.tgz#763d02a894f3cdfc521b10bbbbc8e0309e750cce"
- integrity sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==
+ version "10.3.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4"
+ integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==
dependencies:
foreground-child "^3.1.0"
jackspeak "^2.0.3"
minimatch "^9.0.1"
minipass "^5.0.0 || ^6.0.2"
- path-scurry "^1.7.0"
+ path-scurry "^1.10.0"
glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.3"
@@ -10683,18 +10682,6 @@ globby@11.1.0, globby@^11.0.1, globby@^11.0.2, globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-globby@^12.0.2:
- version "12.2.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22"
- integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==
- dependencies:
- array-union "^3.0.1"
- dir-glob "^3.0.1"
- fast-glob "^3.2.7"
- ignore "^5.1.9"
- merge2 "^1.4.1"
- slash "^4.0.0"
-
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -10974,11 +10961,6 @@ he@1.2.0, he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-hello-wasm-pack@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/hello-wasm-pack/-/hello-wasm-pack-0.1.0.tgz#482a2e3371828056ac35f5b5fec76c0b99dcd530"
- integrity sha512-3hx0GDkDLf/a9ThCMV2qG4mwza8N/MCtm8aeFFc/cdBCL2zMJ1kW1wjNl7xPqD1lz8Yl5+uhnc/cpui4dLwz/w==
-
hex-rgb@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776"
@@ -11051,9 +11033,9 @@ html-encoding-sniffer@^2.0.1:
whatwg-encoding "^1.0.5"
html-entities@^2.1.0, html-entities@^2.3.2:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.6.tgz#966391d58e5737c77bca4025e31721b496ab7454"
- integrity sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
+ integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
html-escaper@^2.0.0:
version "2.0.2"
@@ -11303,7 +11285,7 @@ ignore@^4.0.3, ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.0.4, ignore@^5.1.9, ignore@^5.2.0:
+ignore@^5.0.4, ignore@^5.2.0:
version "5.2.4"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
@@ -12916,12 +12898,14 @@ jss@10.10.0, jss@^10.10.0:
tiny-warning "^1.0.2"
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
- integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9"
+ integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==
dependencies:
- array-includes "^3.1.5"
- object.assign "^4.1.3"
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
junk@^3.1.0:
version "3.1.0"
@@ -13384,10 +13368,10 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
-lru-cache@^9.1.1:
- version "9.1.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835"
- integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
+ integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
lunr@^2.3.9:
version "2.3.9"
@@ -13724,9 +13708,9 @@ mem@^8.1.1:
mimic-fn "^3.1.0"
memfs@^3.1.2, memfs@^3.2.2, memfs@^3.4.1, memfs@^3.4.3:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.3.tgz#d9b40fe4f8d5788c5f895bda804cd0d9eeee9f3b"
- integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
+ integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==
dependencies:
fs-monkey "^1.0.4"
@@ -14248,9 +14232,9 @@ minimatch@^8.0.2:
brace-expansion "^2.0.1"
minimatch@^9.0.0, minimatch@^9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
- integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057"
+ integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==
dependencies:
brace-expansion "^2.0.1"
@@ -15104,7 +15088,7 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
-object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4:
+object.assign@^4.1.2, object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
@@ -15233,16 +15217,16 @@ optionator@^0.8.1:
word-wrap "~1.2.3"
optionator@^0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
- integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
- word-wrap "^1.2.3"
ora@^5.4.1:
version "5.4.1"
@@ -15682,12 +15666,12 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.6.1, path-scurry@^1.7.0:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
- integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+path-scurry@^1.10.0, path-scurry@^1.6.1:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3"
+ integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==
dependencies:
- lru-cache "^9.1.1"
+ lru-cache "^9.1.1 || ^10.0.0"
minipass "^5.0.0 || ^6.0.2"
path-to-regexp@0.1.7:
@@ -16659,9 +16643,9 @@ react-google-charts@^3.0.15:
react-load-script "^0.0.6"
react-hook-form@^7.14.2:
- version "7.45.0"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.0.tgz#df2bbc8cee598855a63ba446e0bb06f7c8120ccf"
- integrity sha512-AbHeZ4ad+0dEIknSW9dBgIwcvRDfZ1O97sgj75WaMdOX0eg8TBiUf9wxzVkIjZbk76BBIE9lmFOzyD4PN80ZQg==
+ version "7.45.1"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.1.tgz#e352c7f4dbc7540f0756abbb4dcfd1122fecc9bb"
+ integrity sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w==
react-identicons@^1.2.5:
version "1.2.5"
@@ -16751,19 +16735,19 @@ react-resize-detector@^8.0.4:
lodash "^4.17.21"
react-router-dom@6, react-router-dom@^6.7.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.13.0.tgz#6651f456bb2af42ef14f6880123b1f575539e81f"
- integrity sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.0.tgz#7ce6c3f73549e4d40216ba150253d3bf30812b33"
+ integrity sha512-YEwlApKwzMMMbGbhh+Q7MsloTldcwMgHxUY/1g0uA62+B1hZo2jsybCWIDCL8zvIDB1FA0pBKY9chHbZHt+2dQ==
dependencies:
- "@remix-run/router" "1.6.3"
- react-router "6.13.0"
+ "@remix-run/router" "1.7.0"
+ react-router "6.14.0"
-react-router@6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.13.0.tgz#7e4427a271dae0cafbdb88c56ccbd9b1434ee93f"
- integrity sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==
+react-router@6.14.0:
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.0.tgz#1c3e8e922d934d43a253fd862c72c82167c0a7f1"
+ integrity sha512-OD+vkrcGbvlwkspUFDgMzsu1RXwdjNh83YgG/28lBnDzgslhCgxIqoExLlxsfTpIygp7fc+Hd3esloNwzkm2xA==
dependencies:
- "@remix-run/router" "1.6.3"
+ "@remix-run/router" "1.7.0"
react-simple-maps@^2.3.0:
version "2.3.0"
@@ -16784,9 +16768,9 @@ react-smooth@^2.0.2:
react-transition-group "2.9.0"
react-tooltip@*:
- version "5.15.0"
- resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.15.0.tgz#54a1fdbd43b5ce90733c7495bc8b575e9c88f58e"
- integrity sha512-OiH870zteP4T5B/J7cUGz37aY8C0Cny/i1qcLXevL+wZlW09mfjdcQ6FKP9OMMsRlszRwieOqAPT9l8rWz+BtA==
+ version "5.16.1"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.16.1.tgz#dafb42170c50d93eaa06e26581ba8e6f7ceb2c48"
+ integrity sha512-z3IKJppX4llW8wQLQB3o5qUutVul79HVXI+Ncjf/5FMHbniCYPnxS1oCLpOhOEG9lV2QZRrQe9+l/pLEPOrrXA==
dependencies:
"@floating-ui/dom" "^1.0.0"
classnames "^2.3.0"
@@ -16965,9 +16949,9 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre
util-deprecate "^1.0.1"
readable-stream@^4.1.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468"
- integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.1.tgz#fa0f0878c3bc0c12b6a82e4e58c5dc160e1faaa2"
+ integrity sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==
dependencies:
abort-controller "^3.0.0"
buffer "^6.0.3"
@@ -17416,9 +17400,9 @@ rollup-plugin-web-worker-loader@^1.6.1:
integrity sha512-4QywQSz1NXFHKdyiou16mH3ijpcfLtLGOrAqvAqu1Gx+P8+zj+3gwC2BSL/VW1d+LW4nIHC8F7d7OXhs9UdR2A==
rollup@^3.17.2, rollup@^3.2.1, rollup@^3.9.1:
- version "3.25.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.1.tgz#9fff79d22ff1a904b2b595a2fb9bc3793cb987d8"
- integrity sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==
+ version "3.25.3"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.3.tgz#f9a8986f0f244bcfde2208da91ba46b8fd252551"
+ integrity sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==
optionalDependencies:
fsevents "~2.3.2"
@@ -17903,11 +17887,6 @@ slash@^2.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
-slash@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
- integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
-
slice-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@@ -18728,9 +18707,9 @@ terser@^4.1.2, terser@^4.6.3:
source-map-support "~0.5.12"
terser@^5.10.0, terser@^5.15.1, terser@^5.16.8, terser@^5.3.4:
- version "5.18.1"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460"
- integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==
+ version "5.18.2"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948"
+ integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@@ -18976,9 +18955,9 @@ ts-jest@^27.0.5:
yargs-parser "20.x"
ts-loader@^9.4.2:
- version "9.4.3"
- resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.3.tgz#55cfa7c28dd82a2de968ae45c3adb75fb888b27e"
- integrity sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==
+ version "9.4.4"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.4.tgz#6ceaf4d58dcc6979f84125335904920884b7cee4"
+ integrity sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==
dependencies:
chalk "^4.1.0"
enhanced-resolve "^5.0.0"
@@ -19070,10 +19049,10 @@ tslib@^1.8.1, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
- integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
+tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+ integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tsutils@^3.21.0:
version "3.21.0"
@@ -19878,7 +19857,7 @@ webidl-conversions@^6.1.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
-webpack-cli@^4.8.0, webpack-cli@^4.9.2:
+webpack-cli@^4.8.0:
version "4.10.0"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31"
integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==
@@ -19930,7 +19909,7 @@ webpack-dev-middleware@^5.3.1:
range-parser "^1.2.1"
schema-utils "^4.0.0"
-webpack-dev-server@^4.5.0, webpack-dev-server@^4.7.4:
+webpack-dev-server@^4.5.0:
version "4.15.1"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7"
integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==
@@ -20057,10 +20036,10 @@ webpack@4:
watchpack "^1.7.4"
webpack-sources "^1.4.1"
-"webpack@>=4.43.0 <6.0.0", webpack@^5.70.0, webpack@^5.75.0, webpack@^5.9.0:
- version "5.88.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.0.tgz#a07aa2f8e7a64a8f1cec0c6c2e180e3cb34440c8"
- integrity sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw==
+"webpack@>=4.43.0 <6.0.0", webpack@^5.75.0, webpack@^5.9.0:
+ version "5.88.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8"
+ integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^1.0.0"
@@ -20203,7 +20182,7 @@ wildcard@^2.0.0:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==